集合(key为不可变类型,即可哈希的值)
使用set(value)工厂函数,把一个列表、元组、字符串转换成集合
集合的两个特点:无序 和唯一 (key不重复)
由于 set 存储的是无序集合,所以我们不可以为集合创建索引或执行切片(slice)操作,也没有键(keys)可用来获取集合中元素的值,但是可以判断一个元素是否在集合中
在集合中添加元素
set.add(elmnt) #用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作,只能添加一个元素
set.update(set) #用于把各种类型以集合元素的形式添加到集合中,可以添加一个或多个元素
移除集合中的元素
set.remove(item) #用于移除集合中的指定元素。如果元素不存在,则会发生错误
set.discard(value) #用于移除指定的集合元素。remove() 方法在移除一个不存在的元素时会发生错误,而 discard() 方法不会
set.pop() #用于随机移除一个元素,若集合为空,则归为字典类型,会报错
集合的交集
set1.intersection(set2) #返回两个集合的交集
set1 & set2 #返回两个集合的交集
set1.intersection_update(set2) #交集,只保留set1中两个集合的交集部分,set2不变
集合的并集
set1.union(set2) #返回两个集合的并集
set1 | set2 #返回两个集合的并集
集合的差集
set1.difference(set2) #返回集合的差集,集合本身不变
set1 - set2 #返回集合的差集,集合本身不变
set1.difference_update(set2) #集合的差集,直接在原来的集合中移除元素,没有返回值
集合的异或
set1.symmetric_difference(set2) #返回集合的异或,即去掉交集部分的两个集合中其他所有元素,集合本身不变
set1 ^ set2 #返回集合的异或,集合本身不变
set1.symmetric_difference_update(set2) #移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中,set1改变,set2不变
判断集合的包含关系
set1.issubset(set2) #判断set1是不是被set2包含,如果是则返回 True,否则返回 False
set1 <= set2 #判断set1是不是被set2包含,如果是则返回 True,否则返回 False
set1.issuperset(set2) #用于判断set1是不是包含set2,如果是则返回 True,否则返回 False
set1 >= set2 #用于判断set1是不是包含set2,如果是则返回 True,否则返回 False
判断集合是否相交
set1.isdisjoint(set2) #用于判断两个集合是不是不相交,如果是返回 True(没有相同元素),否则返回 False(有相同元素)
不可变集合
frozenset([iterable]) #返回一个冻结的集合,冻结后集合不能再添加或删除任何元素
例:b = frozenset('lsgogroup') # 需要注意的是frozenset仍然可以进行集合操作,只是不能用带有update的方法
print(b) # frozenset({'g', 's', 'p', 'r', 'u', 'o', 'l'})
序列
在 Python 中,序列类型包括字符串、列表、元组、集合和字典,这些序列支持一些通用的操作,但比较特殊的是,集合和字典不支持索引、切片、相加和相乘操作
列表
[1, 1, 2, 3, 5, 8]
元组
(1, 1, 2, 3, 5, 8)
字符串
112358
sorted()函数
sorted(iterable, key=None, reverse=False)#对所有可迭代的对象进行排序操作
iterable #可迭代对象
key=lambda a: a["age"] # 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序,'a'可以任意更改
reverse:排序规则,reverse = True 降序 , reverse = False 升序(默认),返回重新排序的列表
反转序列顺序
reversed(seq) #函数返回一个反转的迭代器
seq #转换的序列,可以是 tuple, string, list 或 range
要在函数前加类型,否则不会输出序列
print(reversed(s)) #<reversed object at 0x000001F0517DFD68>
print(list(reversed(s))) # [8, 7, 6, 5]
组合索引序列,一般用在 for 循环当中
enumerate(sequence[,start=0]) #用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据下标(默认下标从0开始)和数据
for i, element in a:
print('{0},{1}'.format(i, element)) #用于输出a中的索引序列
zip()函数,打包元组
用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存
a = [1, 2, 3]
b = [4, 5, 6]
c = [4, 5, 6, 7, 8]
zipped = zip(a, b) #返回一个迭代器
print(zipped) # <zip object at 0x000000C5D89EDD88>
print(list(zipped)) # [(1, 4), (2, 5), (3, 6)]
zipped = zip(a, c) #如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同
print(list(zipped)) # [(1, 4), (2, 5), (3, 6)]
a1, a2 = zip(*zip(a, b)) #利用 * 号操作符,可以将元组解压为列表,打包[1,4]、[2,5]、[3,6]
print(list(a1)) # [1, 2, 3]
print(list(a2)) # [4, 5, 6]