“容器“技术非常火,本文介绍的容器并不是非常火的类似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容器包括:列表、元组、集合、和字典。

列表、元组、字典被称为序列类型,集合不是。

元组中的元素是不可变的。

集合不包含重复项。集合里面不能嵌套集合。

*操作符可以解包列表、元组、集合。