“容器“技术非常火,本文介绍的容器并不是非常火的类似docker的容器技术,而是python编程中的容器:列表、元组、集合、和字典。
Python中的容器可以解释为:一个包含多个数据项的实体。容器数据类型也称为复合数据类型。
什么是列表
虽然列表可以包含不同的类型,但它们通常是相似类型的集合。
name = ['ZhangSan', 'LiSi', 'Wangwu', 'ChenLiu']
age = [23, 24, 25, 26]
列表中的项可以重复,即一个列表可以包含重复的项。
访问列表元素
与字符串一样,可以使用索引访问列表项。因此,它们也被称为序列类型。索引值从0开始。
与字符串一样,列表也可以被分割、截取。
只需使用列表的名称就可以打印整个列表。
Python中所有关键字也可以作为一个列表获得。
import keyword
print(keyword.kwlist)
注:大家如果记不住python关键字的话,可以使用这个功能查询。
列表的基本操作
与字符串不同,列表是可变的,可以对列表进行“增、删、改、查”。
ages = [1, 2, 3, 45, 6, 4, 21, 54, 7]
ages[5] = 31
ages[2:5] = [24,25,26]
ages[2:5] = [] #删除列表中的第2项到第4项
ages[:] = [] #清除列表中的所有项
可以比较两个列表。列表之间逐项对比直到不匹配为止。
a = [1, 2, 3, 4, 5]
b = [1, 2, 5]
if a < b :
print("a is less than b")
elif b == a:
print('a is equal to b')
else:
print('b is less than a')
# 可以确定a小于b
列表的方法
一些常用的方法如下所示:
lst = [1, 2, 3, 4, 5] #创建列表
lst = lst + [11,22,33,44] #连接列表
lst.append(22) #在列表末尾增加新元素
lst.remove(1) #从列表中删除1
lst.pop() #删除列表的最后一项
lst.pop(3) #删除列表中的第3项
lst.insert(3,12) #在列表中第3项的位置插入21
lst.reverse() #将列表中的项逆序
lst.sort() #对列表中的项排序
lst.count(3) #返回列表中3出现的次数
idx = lst.index(3) #返回3的索引值
列表的类型
可以从另一个列表中衍生出一个新列表。
lst = [1, 2, 3, 4, 5]
b = lst
b[2] = 222
# lst和b指向同一个列表,改变一个另一个也会跟着改变。
print(b)
print(lst)
# 结果都是:[1, 2, 222, 4, 5]
可以创建一个列表的列表。
a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9, ]
c = [a, b]
print(c)
# 结果:[[1, 2, 3, 4, 5], [6, 7, 8, 9]]
一个列表可以嵌入另一个列表中。
x = [1, 2, 3, 4, 5]
y = [6, 7, 8, 9, x]
print(y)
# 结果:[6, 7, 8, 9, [1, 2, 3, 4, 5]]
可以使用*操作符在列表中解包一个列表。
x = [1, 2, 3, 4, 5]
y = [6, 7, 8, 9, *x]
print(y)
# 结果:[6, 7, 8, 9, 1, 2, 3, 4, 5]
什么是元组
元组通常是包含在()中的异构对象的集合。
问:b是不是元组?
b = (10)
print(type(b),b)
# 结果:<class 'int'> 10
注:在初始化元组b时,如果在10后面不使用逗号,b将被视为int型数据。
b = (10,)
print(type(b), b)
# 结果:<class 'tuple'> (10,)
问:下面c是否为元组?
c = 'ZhangSan', 25
print(type(c), c)
# 结果:<class 'tuple'> ('ZhangSan', 25)
注:在初始化元组时,可以不使用()。
元组是不可变的(与列表不同),但是它们可以包含像列表这样的可变对象。
s = ([ 1, 2, 3, 4], [5, 6], 'ZhangSan')
元组中的项可以重复,即元组可能包含重复的项。
元组用于处理异构数据,而列表用于处理可变长度的数据。
访问元组元素
与列表一样,元组项也可以使用索引访问,因为它们都是序列类型。
与列表一样,元组也可以被分割成更小的元组。
只需使用元组的名称就可以打印整个元组。
元组的基本操作
与列表不同,元组是不可变的。
name = ('ZhangSan', 'Lisi', 'Wangwu')
name[0] = 'Li' #报错
name[0:1] = ('111', '222') #报错
常见的元组操作如下:
t = (1, 2, 4, 3, 5, 6, 7) #创建元组
t = t + (88, 99) #连接元组
len(t) #返回元组t中元素的数量
tuple('Zhang') #将字符串转换为元组('Z','h','a','n','g')
max(t) #返回元组t中的最大值
min(t) #返回元组t中的最小值
sorted(t) #返回排序后的元组,t保持不变
sum(t) #返回元组t中所有元素的和
t.index(2) #返回元素2的索引
t.count(2) #返回2在元组中出现的次数
元组的类型
可以创建元组的元组。(与列表功能相同)
一个元组可以嵌入到另一个元组中。(与列表功能相同)
可以使用*操作符在一个元组中解包另一个元组。(与列表功能相同)
什么是集合
集合类似于列表,但是它不包含重复项。
集合是无序的,因此,插入的顺序和访问的顺序是不一样的。
集合像列表一样是可变的,它们的内容可以更改。
集合里面不能嵌套集合。
访问集合元素
由于集合是无序的,所以不能使用索引访问集合中的元素。
集合不能使用[]进行切片。
使用集合的名称就能打印出整个集合。
与字符串、列表和元组一样,集合也可以使用for循环进行迭代。
集合的操作
常见的集合操作如下:
s = {10, 20, 30, 40, 50, 60, 70} #创建集合
len(s) #返回集合s中的元素数量
max(s) #返回集合s中的元素最大值
min(s) #返回集合s中的元素最小值
sorted(s) #返回排序后的集合
sum(s) #返回集合s中所有元素的和
可以使用*操作符解压一个集合
x = {1, 2, 3, 4, 5}
print(*x)
# 结果:1 2 3 4 5
下面的函数可在集合中使用:
s = {1, 2, 3, 4, 5}
t = {'A', 'B', 'C'}
s.update(t) #将t中的元素添加到s中
s.add('AAA') #在s中增加‘AAA’
s.remove(5) #从s中删除5
s.clear() #删除所有元素
集合的数学运算
对集合可以进行并、交、差运算
# 集合
s = {1, 2, 3, 4, 5}
t = {'A', 3, 'C'}
# 并集
print(s|t)
# 交集
print(s&t)
# 差集
print(s-t)
# 差集
print(t-s)
# 对称差分
print(s^t)
什么是字典
字典是键-值对的集合。与序列类型不同,它们是通过键进行索引的。
字典也被称为映射或关联数组。
字典中的键必须是唯一且不可变的,所以字符串或元组可以用作键。
虽然键值是唯一的,但是不同的键可能具有相同的值。
访问字典元素
可以使用键作为索引来访问字典元素。
b = {'11': 'AA', '33': 'CC', '22': 'BB', '44': 'DD', '55': 'FF'}
print(type(b), b)
print(b['33'])
字典的操作
字典是可变的,所以我们可以对字典执行增、删、改操作。
b = {'11': 'AA', '33': 'CC', '22': 'BB', '44': 'DD', '55': 'FF'}
b ['66'] = 'GG' #添加新的键-值对
b['44'] = 'D' #修改键对应的值
del(b['66']) #删除键-值对
del(b) #删除字典对象
字典函数
b.clear() # 清除所有字典元素
b.update(c) # 在字典元素中添加c
字典的三种迭代方式
b = {'11': 'AA', '33': 'CC', '22': 'BB', '44': 'DD', '55': 'FF'}
# 通过键-值对迭代
for k,v in b.items():
print(k, v)
# 通过键迭代
for k, v in b.keys():
print(k)
# 通过键迭代——更简洁的方式
for k in b:
print(k)
# 通过值迭代
for v in b.values():
print(v)
总结
python容器包括:列表、元组、集合、和字典。
列表、元组、字典被称为序列类型,集合不是。
元组中的元素是不可变的。
集合不包含重复项。集合里面不能嵌套集合。
*操作符可以解包列表、元组、集合。