python之set集合,基礎篇
阿新 • • 發佈:2021-07-08
集合:set
特點:
1>、無序 ,因為集合是無序的,所以不可用下標值查詢,也不可切片
2>、去重 ,一個集合內不能有兩個相同的元素
3>、可新增,可刪除,不可修改等等
4>、集合內的元素可以是任何型別,字串,列表,元組
1,定義一個空集合
name_set = set()
需要注意的是:
name_str = "" --定義空字串 name_list = [] --定義空列
name_list = list() --定義空列表
name_tuple = () --定義空元組
name_tuple = tuple()--定義空元組
name_set= set() --定義空集合
name_dict = {} --定義空字典
name_dict = dict() --定義空字典
2,定義一個非空集合
name_set = {'a', 'b', 'c'} print(name_set)
注意的是,如果定義的時候有兩個相同的元素,因為集合是去重的,所以....,你懂的!
name_set = {'a', 'b','b', 'c'} print(name_set)
print(type(name_set))
3,資料型別轉換,把列表轉換為集合--(自動去重)
name_list = ['a', 'c', 'b', 'a'] name_set = set(name_list) # 強制轉換 print(name_set)
4,集合運算
集合之間也可進行數學集合運算(例如:並集、交集,差集,對稱差集等),可用相應的操作符或方法來實現。
1>交集
兩個集合 A 和 B 的交集是含有所有既屬於 A 又屬於 B 的元素,而沒有其他元素的集合。
intersection() 或者 &
name1_list = ["a", "b", "c"] name2_list = ["a", "c", "m"] name1_set = set(name1_list) name2_set= set(name2_list) print(name1_set.intersection(name2_set)) print(name1_set & name2_set)
2>,並集
一組集合的並集是這些集合的所有元素構成的集合,
union() 或者 |
name1_list = ["a", "b", "c"] name2_list = ["a", "c", "m"] name1_set = set(name1_list) name2_set = set(name2_list) print(name1_set.union(name2_set)) print(name1_set | name2_set)
3>,差集
A 與 B 的差集是所有屬於 A 且不屬於 B 的元素構成的集合
difference() 或者 -
name1_list = ["a", "b", "c"] name2_list = ["a", "c", "m"] name1_set = set(name1_list) name2_set = set(name2_list) print(name2_set.difference(name1_set)) print(name2_set - name1_set)
4>,對稱差集
集合A與集合B中只有集合A或集合B有的元素的集合
symmetric_difference() 或者 ^
name1_list = ["a", "b", "c"] name2_list = ["a", "c", "m"] name1_set = set(name1_list) name2_set = set(name2_list) print(name1_set.symmetric_difference(name2_set)) print(name1_set ^ name2_set)
5>,是否是子集
子集,為某個集合中一部分的集合,故亦稱部分集合,即集合A中所有的元素都是集合B中的元素,則集合A是集合B的子集。
issubset() <= 是返回True,不是返回False
name1_list = ["a", "b", "c"] name2_list = ["a", "c"] name1_set = set(name1_list) name2_set = set(name2_list) print(name2_set.issubset(name1_set)) print(name2_set <= name1_set)
print(name1_set<=name2_set)
6>,是否是父集
即集合A中所有的元素都是集合B中的元素,則集合B是集合A的子集。
issuperset() >= 是父集返回True,不是則返回False
name1_list = ["a", "b", "c"] name2_list = ["a", "c"] name1_set = set(name1_list) name2_set = set(name2_list) print(name1_set.issuperset(name2_set)) print(name1_set >= name2_set)
7>,是否有交集,
判斷兩個集合是否無交集:無交集返回True,有交集返回False
isdisjoint()
name1_list = ["a", "b", "c"] name2_list = ["a", "c"] name1_set = set(name1_list) name2_set = set(name2_list) print(name1_set.isdisjoint(name2_set))
5,集合的方法
name_set = set() print(dir(name_set))
1>,add(),
新增1個元素
name_{'a', 'b'} name_set.add("c") print(name_set)
2>,clear()
清除set集合中所有元素
name_set = {'a', 'b'} name_set.clear() print(name_set)
3>,discard()
刪除集合中某個元素,元素存在則刪除,不存在則不報錯
name_list = ['a', 'b', 'c'] name_set = set(name_list) name_set.discard("b") # 刪除存在的元素 print(name_set)
4>,pop()
刪除隨機一個元素.
name_list = ['a', 'b', 'c'] name_set = set(name_list) name_set.pop() print(name_set)
5>,remove()
刪除某個元素,如果元素存在則刪除,不存在則報錯
name_list = ['a', 'b', 'c'] name_set = set(name_list) name_set.remove("b") #存在的元素 print(name_set)
6>,update()
新增多個元素
name_list = ['a', 'b', 'c'] name_set = set(name_list) name_set.update({"m", "n", "b"}) # 列表、元組、集合、字串 name_set.update(['mnb']) print(name_set)
6,型別轉化
列表 或者 元組轉化為 集合
name_tuple = ("a", "b", 'c') name_set = set(name_tuple)
name_list = ['a', 'b', 'c']
name_set = set(name_list)
name_list = list(name_set) # 集合轉換為列表
print(name_list)
7,因為集合是去重的,所有對集合做多的用法就是去重
Mysql中去重的方法有distinct,group by (分組)
python中關於去重的方式就是轉化成集合,然後在轉化回去。
注意的是,如果字串想轉化為集合,需要先轉化成列表,然後再轉化成集合。