Python|Python 集合之set详解
目录
- 引言
- 集合的定义
- 集合常用操作
- 集合添加元素
- 集合移除元素
- 集合统计、清空元素
- 集合元素获取(遍历)
- 集合之间的运算
- 集合差运算 -
- 集合并运算 |
- 集合交运算 &
- 集合异或运算 ^
- 应用场景
- 普通for循环去重
- 利用集合简单去重
- 去重保持原来的顺序
- 总结
引言
set(集合)虽然用的很少,但它是一个无序的不重复元素序列,用来简单的去重挺快的。
集合的定义
set(集合) 与列表类似,不同之处在于集合的 元素不重复{ } 定义
集合和字典一样也是用 {} 定义,但元素之间使用 , 分隔,或者使用 set()
#!/usr/bin/python3# -*- coding:utf-8 -*-name_set = {'hui', 'wang', 'zack', 'hui'}print(name_set)# 结果为 {'hui', 'wang', 'zack'}name_set = set('hui', 'wang', 'zack', 'hui')
set() 定义
set() 只接受一个参数
In [13]: name_set = set('hui')In [14]: name_setOut[14]: {'h', 'i', 'u'}In [15]: name_set = set(['hui', 'wang', 'zack', 'hui'])In [16]: name_setOut[16]: {'hui', 'wang', 'zack'}
注意:空集合不能用 s = {} 来定义这样默认是字典,应该 s = set()
In [27]: s = {}In [28]: s1 = set()In [29]: type(s)Out[29]: dictIn [30]: type(s1)Out[30]: set
集合常用操作 集合所有内置方法如下:
文章图片
方法太多我选几个常用的测试一下。
集合添加元素
使用 add() 即可向集合中添加元素
In [33]: s = set()In [34]: s.add(1)In [35]: s.add(4)In [36]: s.add(3)In [37]: sOut[37]: {1, 3, 4}In [38]: s.add(2)In [39]: sOut[39]: {1, 2, 3, 4}
集合移除元素
remove()
移除集合中的元素,且如果元素不存在,会报错discard()
移除集合中的元素,且如果元素不存在,不会发生错误pop()
随机移除集合内的一个元素
In [38]: # remove() 移除In [39]: sOut[39]: {1, 2, 3, 4}In [40]: s.remove(3)In [41]: sOut[41]: {1, 2, 4}In [42]: s.remove(5)---------------------------------------------------------------------------KeyErrorTraceback (most recent call last)in ----> 1 s.remove(5)KeyError: 5
In [45]: # discard() 移除In [46]: sOut[46]: {1, 2, 4}In [47]: s.discard(4)In [48]: sOut[48]: {1, 2}In [49]: s.discard(3)In [50]: sOut[50]: {1, 2}
In [56]: # pop() 随机移除In [57]: s.pop()Out[57]: 1In [58]: sOut[58]: {2, 3, 9, 'hui'}In [59]: s.pop()Out[59]: 2In [60]: sOut[60]: {3, 9, 'hui'}
其实set 集合的 pop方法会将集合的左边第一个元素进行删除,并返回删除的元素。
集合统计、清空元素
- len() 统计集合元素个数
- clear() 清空集合
In [68]: name_setOut[68]: {'wang', 'zack'}In [69]: len(name_set)Out[69]: 2In [71]: name_set.clear()In [72]: len(name_set)Out[72]: 0In [73]: name_setOut[73]: set()
集合元素获取(遍历)
集合不支持索引,也没有方法进行获取,因此只能采用 for ... in ... 遍历方式获取元素。
In [81]: name_setOut[81]: {'hui', 'wang', 'zack'}In [82]: for name in name_set:...:print(name)...:huiwangzackIn [83]: name_set[0]---------------------------------------------------------------------------TypeErrorTraceback (most recent call last)in ----> 1 name_set[0]TypeError: 'set' object is not subscriptable
集合之间的运算
集合差运算 -
In [89]: a = {1, 2, 3, 4, 5}In [90]: b = {1, 2, 3, 6}In [91]: a - bOut[91]: {4, 5}In [92]: b - aOut[92]: {6}In [93]: a.difference(b)Out[93]: {4, 5}In [94]: b.difference(a)Out[94]: {6}
a - b 就相当于在 a 中去除跟 b 相同的元素b - a 也就是在 b 中去除跟 a 相同的元素a - b 等同于 a.difference(b)
集合并运算 |
In [95]: aOut[95]: {1, 2, 3, 4, 5}In [96]: bOut[96]: {1, 2, 3, 6}In [97]: a | bOut[97]: {1, 2, 3, 4, 5, 6}
集合交运算 &
In [99]: aOut[99]: {1, 2, 3, 4, 5}In [100]: bOut[100]: {1, 2, 3, 6}In [101]: a & bOut[101]: {1, 2, 3}
集合异或运算 ^
In [102]: aOut[102]: {1, 2, 3, 4, 5}In [103]: bOut[103]: {1, 2, 3, 6}In [104]: a ^ bOut[104]: {4, 5, 6}
把 a, b 集合中的相同元素都去掉,剩下的就是 ^ 异或运算的结果。
应用场景
普通for循环去重
In [1]: li = [2, 1, 3, 6, 2, 1]In [2]: temp = []In [3]: for i in li:...:if i not in temp:...:temp.append(i)...:In [4]: liOut[4]: [2, 1, 3, 6, 2, 1]In [5]: tempOut[5]: [2, 1, 3, 6]
利用集合简单去重
In [106]: li = [1, 2, 2, 3, 3, 5]In [107]: li = set(li)In [108]: liOut[108]: {1, 2, 3, 5}In [109]: type(li)Out[109]: setIn [110]:
这样把原来的列表类型变成了集合类型,这样更不好操作,这样不是想要的结果。
因此要做到 去重加类型不变,只要再嵌套一个list() 即可
In [110]: li = [1, 2, 2, 3, 3, 5]In [111]: li = list(set(li))In [112]: liOut[112]: [1, 2, 3, 5]In [113]: type(li)Out[113]: listIn [114]:
去重保持原来的顺序
使用 sort + set 去重
In [6]: list1 = [2, 1, 3, 6, 2, 1]In [7]: list2 = list(set(list1))In [8]: list2Out[8]: [1, 2, 3, 6]In [9]: list2.sort(key=list1.index)In [10]: list2Out[10]: [2, 1, 3, 6]
【Python|Python 集合之set详解】使用 sorted + set 去重
In [12]: list1 = [2, 1, 3, 6, 2, 1]In [13]: temp = sorted(set(list1), key=list1.index)In [14]: tempOut[14]: [2, 1, 3, 6]
总结 本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
推荐阅读
- PMSJ寻平面设计师之现代(Hyundai)
- 太平之莲
- 闲杂“细雨”
- 七年之痒之后
- 深入理解Go之generate
- 由浅入深理解AOP
- 图书集合完毕
- 期刊|期刊 | 国内核心期刊之(北大核心)
- 生活随笔|好天气下的意外之喜
- 感恩之旅第75天