Python的集合与序列

集合(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]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值