python通关 集合操作方法详解

た 入场券 2023-01-08 02:06 233阅读 0赞

说集合之前,我们先说一个小例子,假设某公司有五个人喜欢打篮球,五个人喜欢打游戏,问即打游戏有打篮球

的人都有哪些?

  1. play_basketball = ['a','b','c','d','e']
  2. play_game = ['a','b','c','f','g']
  3. both_play=[]
  4. for name in play_basketball:
  5. if name in play_game:
  6. both_play.append(name)
  7. print(both_play)
  8. 结果:
  9. ['a', 'b', 'c']

在不了解集合之前我们肯定以上面的方法解决问题,但是学了集合之后,我们就有更简单的方法了,是什么呢?让我们慢慢了解。

集合set

集合用于包含一组无序的对象。与列表和元组不同,集合是无序的,也无法通过数字进行索引。此外,集合中的元素不能重复。set和dict一样,只是没有value,相当于dict的key集合,由于dict的key是不重复的,且key是不可变对象因此set也有如下特性:

  1. 不重复,(互异性),也就是说集合是天生去重的
  2. 元素为不可变对象,(确定性,元素必须可hash)
  3. 集合的元素没有先后之分,(无序性)

  首先笼统的讲一下python3.x集合的内置函数有17个,分别如下:

dec7dc76ed4be66e33cc89f462772bf8.png






























































































序号 函数 描述
1 add(self, args, **kwargs)  是把要传入的元素做为一个整个添加到集合中
2 clear(self, args, kwargs)  清空集合里面的所有元素
3 copy(self, *args, kwargs) 复制集合里面的所有元素 ,返回一个浅复制
4 difference(self, args, **kwargs) 求两个集合里面的不同的元素 ,又称差
5 difference_update(self, args, kwargs)  返回删除了 set “集合2”中含有的元素后的 set “集合1” 
6 discard(self, *args, kwargs)  如果在 set “集合”中存在元素 x, 则删除 
7 intersection(self, args, **kwargs) 求两个集合里面相同的元素,又称并 , 返回只保留含有 set “集合2”中元素的 set “集合1” 
8 intersection_update(self, args, kwargs)  , 返回只保留含有 set “集合2”中元素的 set “集合1” ,并更新自己
9 isdisjoint(self, *args, kwargs)  判断两个集合是不是不相交,并返回
10 issubset(self, args, **kwargs)  判断集合是不是包含其他集合,等同于a>=b
11 issuperset(self, args, kwargs) 判断集合是不是被其他集合包含,等同于a<=b 
12 pop(self, *args, kwargs)  删除并且返回 set “集合”中的一个不确定的元素, 如果为空则引发 KeyError 
13 remove(self, args, **kwargs)  从 set “集合”中删除元素 , 如果不存在则引发 KeyError 
14 symmetric_difference(self, args, kwargs)  返回一个新的 set 包含 外面 和 里面 中不重复的元素 也就是两个集合不重复的元素 
15 symmetric_difference_update(self, *args, kwargs)  返回含有 set “里面”或者 set “外面”中有而不是两者都有的元素的 set “外面” 
16 union(self, args, **kwargs) 把两个集合连接起来,又称并 
17 update(self, args, **kwargs)  可以在集合里面添加多项

1,定义集合

  1. #第一种方法
  2. nums = [1,2,3,4,5,6,7]
  3. num_set = set(nums)
  4. print(num_set)
  5. 结果:
  6. { 1, 2, 3, 4, 5, 6, 7}
  7. #第二种方法
  8. num_set ={ 1,2,3,4,5,6,7}

2,增(更新)

set.add()

set.update([])

  1. nums = { 1,2,3,4,5,6,7}
  2. #set.add()增加只能增加一个,不能增加多个值
  3. # nums.add(8)
  4. # print(nums)
  5. #set.update()可以增加一个字符串,可以增加多个值
  6. # nums.update([8])
  7. # print(nums)
  8. # nums.update('8')
  9. # print(nums)
  10. nums.update([8,9,10])
  11. print(nums)

3,删

set1.remove(1)

  1. nums = { 1,2,3,4,5,6,7}
  2. nums.remove(7)
  3. print(nums)
  4. 结果:
  5. { 1, 2, 3, 4, 5, 6}

4,查:无法通过下标索引

5,改:不可变类型无法修改元素

6,交( &)

  1. nums1 ={ 1, 2, 3, 4, 5, 6}
  2. nums2 ={ 1, 2, 3, 4, 5, 10,7,8,9}
  3. #交的方式一:&
  4. a = nums1&nums2
  5. print(a)
  6. #并的方式二:intersaction
  7. b = nums1.intersection(nums2)
  8. print(b)
  9. 结果:
  10. { 1, 2, 3, 4, 5}
  11. { 1, 2, 3, 4, 5}

7,并(|)

  1. nums1 ={ 1, 2, 3, 4, 5, 6}
  2. nums2 ={ 1, 2, 3, 4, 5, 10,7,8,9}
  3. #并的方式一:|
  4. a = nums1|nums2
  5. print(a)
  6. #并的方式二:uniom
  7. b = nums1.union(nums2)
  8. print(b)
  9. 结果:
  10. { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
  11. { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

8,差(-)

  1. nums1 ={ 1, 2, 3, 4, 5, 6}
  2. nums2 ={ 1, 2, 3, 4, 5, 10,7,8,9}
  3. #差的方式一:-
  4. a1 = nums1-nums2
  5. print(a1)
  6. a2 = nums2-nums1
  7. print(a2)
  8. #差的方式二:difference
  9. b1 = nums1.difference(nums2)
  10. print(b1)
  11. b2 = nums2.difference(nums1)
  12. print(b2)
  13. 结果:
  14. { 6}
  15. { 8, 9, 10, 7}
  16. { 6}
  17. { 8, 9, 10, 7}

9,对称差集(^)

  1. nums1 ={ 1, 2, 3, 4, 5, 6}
  2. nums2 ={ 1, 2, 3, 4, 5, 10,7,8,9}
  3. #对称差集表示方法一:^
  4. a1 = nums1^nums2
  5. print(a1)
  6. #对称差集表示方法二:symmetric_difference
  7. a2 = nums2.symmetric_difference(nums1)
  8. print(a2)
  9. 结果:
  10. { 6, 7, 8, 9, 10}
  11. { 6, 7, 8, 9, 10}

10,集合转换

  1. se = set(range(4))
  2. li = list(se)
  3. tu = tuple(se)
  4. st = str(se)
  5. print(li,type(li))
  6. print(tu,type(tu))
  7. print(st,type(st))
  8. 结果:
  9. [0, 1, 2, 3] <class 'list'>
  10. (0, 1, 2, 3) <class 'tuple'>
  11. { 0, 1, 2, 3} <class 'str'>

补充:frozenset

冰冻集合,是一种特殊的集合类型,也是集合(集合是列表的话,冰冻集合就是元组)

下面创建冰冻集合(一般不会创建空的冰冻集合)

**  同时下面包含函数的补充**

  1. #创建带数据的冰冻集合
  2. info = frozenset(('xuexi','gongzuo','kaoyan','xiuxi'))
  3. print(info,type(info))
  4. #成员监测
  5. result = 'gongzuo' in info
  6. print(result)
  7. #遍历冰冻集合
  8. for i in info:
  9. print(i)
  10. #集合推导式(无法得到冰冻集合,可以得到集合,列表,元组,字典类型)
  11. result = { i for i in info}
  12. print(result,type(result))
  13. #函数
  14. #冰冻集合可以使用集合的函数(不修改集合本身的函数都可以使用)
  15. info = frozenset(('xuexi','gongzuo','kaoyan','xiuxi'))
  16. #copy()
  17. result = info.copy()
  18. print(result)
  19. #集合操作 交集,并集,差集,对称差集等 不修改冰冻集合本身就能使用:冰冻集合的操作结果都是冰冻集合
  20. info = frozenset(('xuexi','gongzuo','kaoyan','xiuxi'))
  21. info2 = { 'xuexi','gongzuo','kaoyan','xiuxi'}
  22. #冰冻集合操作
  23. result = info.union(info2)
  24. print(result)
  25. #普通集合操作(冰冻集合是参考集合)
  26. result = info2.union(info)
  27. print(result)

发表评论

表情:
评论列表 (有 0 条评论,233人围观)

还没有评论,来说两句吧...

相关阅读