? ?Python除了List、Tuple、Dict等常用數據類型外,還有一種數據類型叫做集合(set),集合的最大特點是:集合里邊的元素是不可重復的并且集合內的元素還是無序的,所以一般情況下集合常用的兩個場景是:1.去重(如:列表去重);2.關系測試(如:取交集、取并集、取差集等)
?1)集合包含一組無序的對象,可以使用set()函數來像下邊的方式一樣來創建集合
#!/usr/bin/env python
# -*-coding:UTF-8 -*-
#創建一個數值集合
set1 = set([1,2,3,4])
#創建一個字符集合 注意:從輸出結果中我們會看到l只出現了一次
set2 = set("HelloWorld!")print('set1 %s' % set1)
print('set2 %s' % set2)
'''運行結果
set1 {1, 2, 3, 4}
set2 {'d', 'o', 'e', 'H', 'l', 'W', 'r', '!'}
'''
? 2)去重,即可能在一些特殊的場景需要用到,實現去除掉列表中的重復元素
#!/usr/bin/env python
# -*-coding:UTF-8 -*-
#列表去重比較簡單
list1 = [3,3,3,4,5,3]
set1 = set(list1)
print("list1去重后的set集合:",set1)#將如中后的集合在轉化成一個新列表
new_list = [i for i in set1]
print("list1去重后的list列表:",new_list)
'''運行結果
list1去重后的set集合: {3, 4, 5}
list1去重后的list列表: [3, 4, 5]
'''
3)關系測試,即一些集合的最基本操作,如集合取交集、取并集、取差集、判斷一個集合是不是另一個集合的子集或者父集等。
#!/usr/bin/env python
# -*-coding:UTF-8 -*-
set1 = set([1,2,3,4,5])
set2 = set([3,4,5,6,7])#取交集
set3 = set1.intersection(set2)
# set3 = set1 & ste2 #取交集,與上邊效果相同
print("set1和set2的交集為:",set3)#取并集
set4 = set1.union(set2)
#set4 = set1 | set2 #取并集,
print("set1和set2的交集為:",set4)#取差集 這個地方要稍稍注意一下,防止進坑
set5 = set1.difference(set2)
#set5 = set1 - set2 #取差集
print("set1與set2的差集為:",set5)
set6 = set2.difference(set1)
print("set2與set1的差集為:",set6)#對稱差集 -----即去掉兩個集合的共同的部分
set7 = set1.symmetric_difference(set2)
#set7 = set1 ^ set2 #對稱差集
print("去掉兩個集合的共同的部分:",set7)#判斷是否是set1是否是set2的子集
flag1 = set1.issubset(set2)
print("print(判斷是否是set1是否是set2的子集):",flag1)#判斷是否是set1是否是set2的父集
flag2 = set1.issuperset(set2)
print("判斷是否是set1是否是set2的父集:",flag2)'''運行結果如下:
set1和set2的交集為: {3, 4, 5}
set1和set2的交集為: {1, 2, 3, 4, 5, 6, 7}
set1與set2的差集為: {1, 2}
set2與set1的差集為: {6, 7}
去掉兩個集合的共同的部分: {1, 2, 6, 7}
print(判斷是否是set1是否是set2的子集): False
判斷是否是set1是否是set2的父集: False
'''
4)集合的一些其它基本操作
#!/usr/bin/env python
# -*-coding:UTF-8 -*-
#輸出集合中的元素
#注意集合與列表和元組不同,集合是無序的,所以無法通過數字進行索引獲取某一個元素的值
set1 = set([1,2,3,4])
for i in set1:print (i)#向集合中添加一個元素
set1.add(5)
print("向集合中添加一個元素5后:",set1)#刪除一個元素
set1.remove(1)
#set1.discard(1) #注意使用remove的時候必須刪除集合中存在的元素,如何元素不存在則會出錯,而使用discard則不會出現錯誤
print("從集合中刪除元素1后:",set1)#計算集合的長度
l = len(set1)
print("集合的長度為:",l)#判斷某個元素是否在集合內
flag1 = 2 in set1
print("判斷元素2是否在集合內:",flag1)#斷某個元素是否不在集合內
flag2 = 3 not in set1
print("判斷元素3是否不在集合內:",flag2)#對集合進行一次淺復制
set2 = set1.copy()
print("對集合進行一次淺復制:",set2)'''運行結果如下:
1
2
3
4
向集合中添加一個元素5后: {1, 2, 3, 4, 5}
從集合中刪除元素1后: {2, 3, 4, 5}
集合的長度為: 4
判斷元素2是否在集合內: True
判斷元素3是否不在集合內: False
對集合進行一次淺復制: {2, 3, 4, 5}
'''
以上是集合(set)的一些比較常用操作的示例,對于集合的一些其它操作,這里就不在一一舉例說明了。
?