說集合之前,我們先說一個小例子,假設某公司有五個人喜歡打籃球,五個人喜歡打游戲,問即打游戲有打籃球
的人都有哪些?
play_basketball = ['a','b','c','d','e']
play_game = ['a','b','c','f','g']
both_play=[]
for name in play_basketball:
if name in play_game:
both_play.append(name)
print(both_play)
結果:
['a', 'b', 'c']
在不了解集合之前我們肯定以上面的方法解決問題,但是學了集合之后,我們就有更簡單的方法了,是什么呢?讓我們慢慢了解。
集合set
集合用於包含一組無序的對象。與列表和元組不同,集合是無序的,也無法通過數字進行索引。此外,集合中的元素不能重復。set和dict一樣,只是沒有value,相當於dict的key集合,由於dict的key是不重復的,且key是不可變對象因此set也有如下特性:
- 不重復,(互異性),也就是說集合是天生去重的
- 元素為不可變對象,(確定性,元素必須可hash)
- 集合的元素沒有先后之分,(無序性)
首先籠統的講一下python3.x集合的內置函數有17個,分別如下:

| 序號 | 函數 | 描述 |
| 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,定義集合
#第一種方法
nums = [1,2,3,4,5,6,7]
num_set = set(nums)
print(num_set)
結果:
{1, 2, 3, 4, 5, 6, 7}
#第二種方法
num_set ={1,2,3,4,5,6,7}
2,增(更新)
set.add()
set.update([])
nums = {1,2,3,4,5,6,7}
#set.add()增加只能增加一個,不能增加多個值
# nums.add(8)
# print(nums)
#set.update()可以增加一個字符串,可以增加多個值
# nums.update([8])
# print(nums)
# nums.update('8')
# print(nums)
nums.update([8,9,10])
print(nums)
3,刪
set1.remove(1)
nums = {1,2,3,4,5,6,7}
nums.remove(7)
print(nums)
結果:
{1, 2, 3, 4, 5, 6}
4,查:無法通過下標索引
5,改:不可變類型無法修改元素
6,交( &)
nums1 ={1, 2, 3, 4, 5, 6}
nums2 ={1, 2, 3, 4, 5, 10,7,8,9}
#交的方式一:&
a = nums1&nums2
print(a)
#並的方式二:intersaction
b = nums1.intersection(nums2)
print(b)
結果:
{1, 2, 3, 4, 5}
{1, 2, 3, 4, 5}
7,並(|)
nums1 ={1, 2, 3, 4, 5, 6}
nums2 ={1, 2, 3, 4, 5, 10,7,8,9}
#並的方式一:|
a = nums1|nums2
print(a)
#並的方式二:uniom
b = nums1.union(nums2)
print(b)
結果:
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
8,差(-)
nums1 ={1, 2, 3, 4, 5, 6}
nums2 ={1, 2, 3, 4, 5, 10,7,8,9}
#差的方式一:-
a1 = nums1-nums2
print(a1)
a2 = nums2-nums1
print(a2)
#差的方式二:difference
b1 = nums1.difference(nums2)
print(b1)
b2 = nums2.difference(nums1)
print(b2)
結果:
{6}
{8, 9, 10, 7}
{6}
{8, 9, 10, 7}
9,對稱差集(^)
nums1 ={1, 2, 3, 4, 5, 6}
nums2 ={1, 2, 3, 4, 5, 10,7,8,9}
#對稱差集表示方法一:^
a1 = nums1^nums2
print(a1)
#對稱差集表示方法二:symmetric_difference
a2 = nums2.symmetric_difference(nums1)
print(a2)
結果:
{6, 7, 8, 9, 10}
{6, 7, 8, 9, 10}
10,集合轉換
se = set(range(4))
li = list(se)
tu = tuple(se)
st = str(se)
print(li,type(li))
print(tu,type(tu))
print(st,type(st))
結果:
[0, 1, 2, 3] <class 'list'>
(0, 1, 2, 3) <class 'tuple'>
{0, 1, 2, 3} <class 'str'>
補充:frozenset
冰凍集合,是一種特殊的集合類型,也是集合(集合是列表的話,冰凍集合就是元組)
下面創建冰凍集合(一般不會創建空的冰凍集合)
同時下面包含函數的補充
#創建帶數據的冰凍集合
info = frozenset(('xuexi','gongzuo','kaoyan','xiuxi'))
print(info,type(info))
#成員監測
result = 'gongzuo' in info
print(result)
#遍歷冰凍集合
for i in info:
print(i)
#集合推導式(無法得到冰凍集合,可以得到集合,列表,元組,字典類型)
result = {i for i in info}
print(result,type(result))
#函數
#冰凍集合可以使用集合的函數(不修改集合本身的函數都可以使用)
info = frozenset(('xuexi','gongzuo','kaoyan','xiuxi'))
#copy()
result = info.copy()
print(result)
#集合操作 交集,並集,差集,對稱差集等 不修改冰凍集合本身就能使用:冰凍集合的操作結果都是冰凍集合
info = frozenset(('xuexi','gongzuo','kaoyan','xiuxi'))
info2 = {'xuexi','gongzuo','kaoyan','xiuxi'}
#冰凍集合操作
result = info.union(info2)
print(result)
#普通集合操作(冰凍集合是參考集合)
result = info2.union(info)
print(result)
字符串操作方法詳解,請看下面博客:http://www.cnblogs.com/wj-1314/p/8419009.html
字典操作方法詳解,請看下面博客:http://www.cnblogs.com/wj-1314/p/8421724.html
列表操作方法詳解,請看下面博客:http://www.cnblogs.com/wj-1314/p/8433116.html
