1. 程式人生 > >python--基礎數據類型 set集合

python--基礎數據類型 set集合

第一個 保存 是否 per code 元素 單獨 sym inter

一.set集合

  set集合是python的一個基本數據類型,一般不是很常用.set中的元素是不重復的.無序的.裏面的元素必須是可hash的(int, str, tuple, bool)

  

  註意:

     set集合中的元素必須是可hash的,但是set本身是不可hash的.set是可變的

     set中的元素是不重復的且無序的

  

使用上面的特性,我們可以用set來去重復

給list去重復

lst = [1,1,2,3,4,5,2,3,4]
print(list(set(lst)))  # 把list轉換成set 再轉換回list

#
[1, 2, 3, 4, 5]

二.集合的增刪改查

  1.增加 .add() . update()

s = {"劉嘉玲", 關之琳, "王祖賢"}
s.add("鄭裕玲")
print(s)

s.add("鄭裕玲") # 重復的內容不會被添加到set集合中
print(s)

s = {"劉嘉玲", 關之琳, "王祖賢"}
s.update("麻花藤") # 叠代更新
print(s)

s.update(["張曼玉", "李若彤","李若彤"])
print(s)

  2.刪除 .pop() .remove() .clear()

s = {"劉嘉玲", 關之琳, "王祖賢","張曼玉", "李若彤"}
item = s.pop() # 隨機彈出一個.
print(s)
print(item)

s.remove(
"關之琳") # 直接刪除元素
print(s)
s.clear()
# 清空set集合.需要註意的是set集合如果是空的. 打印出來是set() 因為要和 dict區分的. print(s) # set() # s.remove("馬虎疼") # 不存在這個元素. 刪除會報錯

  3.修改

# set集合中的數據沒有索引. 也沒有辦法去定位一個元素. 所以沒有辦法進行直接修改.
# 我們可以采用先刪除後添加的方式來完成修改操作 s = {"劉嘉玲", 關之琳, "王祖賢","張曼?", "李若彤"} # 把劉嘉玲改成趙本山 s.remove("劉嘉玲") s.add("趙本?") print(s)

  4.查詢

# set是一個可叠代對象. 所以可以進行for循環
for el in s:
  print(el)

三.其他的常用操作

  set集合本身是可以發生改變的. 是不可hash的. 我們可以使用frozenset來保存數據. frozenset是不可變的. 也就是一個可哈希的數據類型

frozenset

是不可變的, 也就是一個可哈希的數據類型

s = frozenset(["a", "b", "c", "d"])
dic = {s:123} # 可以正常使用了
print(dic)

#{frozenset({‘c‘, ‘d‘, ‘b‘, ‘a‘}): ‘123‘}

集合中的操作

s1 = {"a", "b", "c"}
s2 = {"d", "e", "a"}

1.交集 兩個集合中共有的元素

print(s1&s2)  # {‘a‘}
print(s1.intersection(s2))  # {‘a‘}

2.並集

print(s1|s2)  # {‘a‘, ‘c‘, ‘b‘, ‘d‘, ‘e‘}
print(s1.union(s2))  # {‘a‘, ‘c‘, ‘b‘, ‘d‘, ‘e‘}

3.差集 得到第一個中單獨存在的

print(s1 - s2)  # {‘c‘, ‘b‘}
print(s1.difference(s2))  # {‘c‘, ‘b‘}

4.反交集 兩個集合中單獨存在的數據

print(s1 ^ s2)  #{‘c‘, ‘d‘, ‘b‘, ‘e‘}
print(s1.symmetric_difference(s2))  # {‘c‘, ‘d‘, ‘b‘, ‘e‘}

5.子集

print(s1 < s2)  # False  判斷set1是否為set2的子集
print(s1.issubset(s2))  #False

6.超集

print(s1 > s2)  # False  判斷set1是否為set2的超集
print(s1.issuperset(s2))  # False

python--基礎數據類型 set集合