Python基础学习(2) 容器及容器的访问使用

本文深入浅出地介绍了Python中list、tuple、dict、set等基本数据结构的操作与应用,包括元素访问、添加、删除及遍历等内容,并通过实例演示了切片、列表推导和生成器等高级特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.list

1.1 list的元素访问,注意list中的元素类型不必全部相同

li = [1, 2, 3, '456', [1, 2, 3], {1 : 'one', 2 : 'two'}]
print(type(li))
print(li[0])
print(li[-1])#倒数第一个元素 li[len(li) - 1]
print(li[-2])

输出为

<class 'list'>
1
{1: 'one', 2: 'two'}
[1, 2, 3]
 

1.2 list中查询元素位置

li = [1, 2, 3, '456', [1, 2, 3], {1 : 'one', 2 : 'two'}]
print(li.index([1, 2, 3]))
print(li.index('456'))

输出为

4
3

 

1.3 在list中添加元素

l_a = [1, 2, 3]
l_a.append(4)
print(l_a)
l_b = [5, 6, 7]
l_a.extend(l_b)#使用append会将l_b作为list加入到l_a中
print(l_a)

输出为

[1, 2, 3, 4]
[1, 2, 3, 4, [5, 6, 7]]

 

1.4 遍历list中的元素

li = [1, 2, 3, '456', [1, 2, 3], {1: 'one', 2: 'two'}]
for i in li:
    print(i)

print(',,,')
for i in range(len(li)):#i为list的下标
    print(li[i])

输出为:

1
2
3
456
[1, 2, 3]
{1: 'one', 2: 'two'}
,,,
1
2
3
456
[1, 2, 3]
{1: 'one', 2: 'two'}
 

1.5 list中删除元素

li = [1, 2, 3, '456', [1, 2, 3], {1: 'one', 2: 'two'}]
del(li[0]) #删除后会生成一个新的list
print(li)
del(li[-1])
print(li)

输出为

[2, 3, '456', [1, 2, 3], {1: 'one', 2: 'two'}]
[2, 3, '456', [1, 2, 3]]
 

2.tuple

tuple可以理解为一个只读数组,改变tuple中的值会报错

t = (1, 2, 3, 4)
print(type(t))
t[0] = 1

输出为:

Traceback (most recent call last):
<class 'tuple'>
  File "/Users/williwei/PycharmProjects/jichu_lesson1/test.py", line 3, in <module>
    t[0] = 1
TypeError: 'tuple' object does not support item assignment
 

3.dict

3.1 访问dict中的元素

d = {'a' : 1, 'b' : 2, 1 : 'one', 2 : 'two', 3 : [1, 2, 3]}
print(type(d))
print(d['a'])
print(d[3])

输出为:

<class 'dict'>
1
[1, 2, 3]
 

3.2 判断dict中key是否存在

d = {'a' : 1, 'b' : 2, 1 : 'one', 2 : 'two', 3 : [1, 2, 3]}
print('a' in d)
print('c' in d)

输出为:

True
False
 

3.3 遍历dict中的元素

d = {'a' : 1, 'b' : 2, 1 : 'one', 2 : 'two', 3 : [1, 2, 3]}
for key in d:
    print(d[key])
print('.....')

for key, value in d.items():
    print(key, value)

d = d.keys()
print(type(d))
print(d)

输出为:

1
2
one
two
[1, 2, 3]
.....
a 1
b 2
1 one
2 two
3 [1, 2, 3]
<class 'dict_keys'>
dict_keys(['a', 'b', 1, 2, 3])
 

3.4 删除dict中的元素

d = {'a' : 1, 'b' : 2, 1 : 'one', 2 : 'two', 3 : [1, 2, 3]}
del(d['a'])
print(d)

输出为:

{'b': 2, 1: 'one', 2: 'two', 3: [1, 2, 3]}

 

4.set

4.1 set中不允许有相同元素存在,以一个list作为参数

s_a = set([1, 2, 3, 4, 5, 5, 6])
print(s_a)
print(1 in s_a)

输出为:

{1, 2, 3, 4, 5, 6}
True
 

4.2 set的集合操作

s_a = set([1, 2, 2, 3, 4, 5, 6])
s_b = set([4, 5, 6, 7, 8, 9])

#并集
print(s_a | s_b)
print(s_a.union(s_b))

#交集
print(s_a & s_b)
print(s_a.intersection(s_b))

#差集 A - (A&B)
print(s_a - s_b)
print(s_a.difference(s_b))

#对称差 (A |B)- (A & B)
print(s_a ^ s_b)
print(s_a.symmetric_difference(s_b))

输出为:

{1, 2, 3, 4, 5, 6, 7, 8, 9}
{1, 2, 3, 4, 5, 6, 7, 8, 9}
{4, 5, 6}
{4, 5, 6}
{1, 2, 3}
{1, 2, 3}
{1, 2, 3, 7, 8, 9}
{1, 2, 3, 7, 8, 9}
 

4.3 set中添加和删除元素

s_a = set([1, 2, 2, 3, 4, 5, 6])
s_b = set([4, 5, 6, 7, 8, 9])

s_a.add('a')
print(s_a)
s_a.update([4, 5, 6, 70])
print(s_a)
s_a.remove(70)
print(s_a)

输出为:

{1, 2, 3, 4, 5, 6, 'a'}
{1, 2, 3, 4, 5, 6, 'a', 70}
{1, 2, 3, 4, 5, 6, 'a'}
 

4.4 遍历set中的元素

s_a = set([1, 2, 2, 3, 4, 5, 6])
for i in s_a:
    print(i)

输出为:

1
2
3
4
5
6
 

5.容器的应用

5.1 切片slice

#切片slice
li = list(range(10))
print(li)
#切片[start:end:steps] >= start <end,默认为1
print(li[2:5])
print(li[:4])
print(li[5:])
print(li[0:10:3])#越界不会报错

#负值怎么处理?
print(li[5:-2]) #[6,7]
print(li[9:0:-1])
print(li[9::-1])
print(li[::-2])

#切片生成一个新的对象
print(li)#还是保持原样
re_li = li[::-1]
print(re_li)

输出为:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[2, 3, 4]
[0, 1, 2, 3]
[5, 6, 7, 8, 9]
[0, 3, 6, 9]
[5, 6, 7]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[9, 7, 5, 3, 1]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
 

5.2 列表推导

列表推导式推导公式

[表达式 for 变量 in 列表]    或者  [表达式 for 变量 in 列表 if 条件]

#一维列表
li = [i * i for i in range(10)]
print(li)

li_1 = [x**2 for x in range(10)]
print(li_1)

#二维列表
li_2d = [[0] * 3] * 3
print(li_2d)

li_2d[0][0] = 100
print(li_2d)

li_2d = [[0] * 3 for i in range(0,3,1)]
li_2d[0][0] = 100
print(li_2d)

li_2d = [[i,j] for i in range(3) for j in range(3)]
li_2d[0][0] = 100
print(li_2d)

di = {x : x % 2 == 0 for x in range(10)} #判断0-10内的数是否为偶数
print(di)

输出为:

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
[[100, 0, 0], [100, 0, 0], [100, 0, 0]]
[[100, 0, 0], [0, 0, 0], [0, 0, 0]]
[[100, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]
{0: True, 1: False, 2: True, 3: False, 4: True, 5: False, 6: True, 7: False, 8: True, 9: False}
 

5.3 generator生成器

生成器中一般包含yield关键字,yield中会保存当前函数的运行状态,函数不终止

def fib(limit):
    n, a, b = 0, 0, 1
    while n < limit:
        yield b 
        a, b = b, a + b
        n += 1
    return 'done'
import traceback
f = fib(5)
print(next(f))
print(next(f))
print(next(f))
print(next(f))
print(next(f))
try:
    print(next(f))
except StopIteration:
    traceback.print_exc()

输出为:

Traceback (most recent call last):
1
1
2
  File "/Users/williwei/PycharmProjects/jichu_lesson1/test.py", line 16, in <module>
3
    print(next(f))
5
StopIteration: done
 

5.4 iterator迭代器

可用isinstance()判断是否是一个可迭代对象

#迭代器
from collections import Iterable
from collections import Iterator

print(isinstance([1, 2, 3], Iterable))
print(isinstance({}, Iterable))
print(isinstance(123, Iterable))
print(isinstance('abc',Iterable))

print(isinstance([1, 2, 3], Iterator))

输出为:

True
True
False
True
False

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值