python set集合

在python變量中除了以前文章所提到的整形int / 浮點數float / 布爾值bool / 列表list / 字典dict 之外,還有一個類型我們還沒有做詳細介紹,這個變量類型就是集合set。

set

一.set集合簡介

python set集合使用大括號 { }表示,與字典dict不同的是set集合並沒有key/value鍵值對,主要有以下兩個特點:

1.元素不允許重複

2.set 不記錄元素的添加順序,即是無序的,和字典類似

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

# !usr/bin/env python

# -*- coding:utf-8 _*-

"""

@Author:何以解憂

@Blog(個人博客地址): shuopython.com

@WeChat Official Account(微信公衆號):猿說python

@Github:www.github.com

 

@File:python_set.py

@Time:2019/11/09 21:25

 

@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!

"""

 

# 創建一個空集合set

set_a = set()

# 打印集合set

print(set_a)

# 查看類型

print(type(set_a))

print("***"*20)

 

# 創建一個集合

set_b = {"猿說python",False}

print(type(set_b))

print(set_b)

print("***"*20)

 

# 創建一個字典

dict_b = {"name":"猿說python","url":"www.shuopython.com"}

print(type(dict_b))

print(dict_b)


輸出結果:

1

2

3

4

5

6

7

8

set()

<class 'set'>

************************************************************

<class 'set'>

{False, '猿說python'}

************************************************************

<class 'dict'>

{'name': '猿說python', 'url': 'www.shuopython.com'}

代碼分析:觀察上面代碼,雖然字典dict 和 集合set 都是由{}構成,注意字典由鍵值對key/value構成,而集合確是由一個一個數據構成,和列表的元素類似!

套路

二.set集合常用函數

add()  — 向 set 集合中添加元素;

remove() — 刪除元素,如果集合中不包含被刪除的元素,remove() 方法會報出 KeyError 異常;

discard()  — 刪除元素,如果集合中不包含被刪除的元素,不會有任何提示或者 異常;

clear() —  就是清空白 set 集合;

copy() — 拷貝一個集合;

difference() — 返回多個集合的差集;

difference_update() — 移除集合中的元素,該元素在指定的集合也存在;

intersection() — 返回集合的交集,不改變集合本身,而是返回兩個集合的交集;

intersection_update() — 返回集合的交集,會通過交集運算改變第一個集合;

isdisjoint() — 判斷兩個集合是否包含相同的元素,如果沒有返回 True,否則返回 False;

issubset() — 判斷指定集合是否爲該方法參數集合的子集;

issuperset() — 判斷該方法的參數集合是否爲指定集合的子集;

pop() — 隨機移除元素;

symmetric_difference() — 移除當前集合中在另外一個指定集合相同的元素,並將另外一個指定集合中不同的元素插入到當前集合中;

union() — 返回兩個集合的並集;

update() — 用於修改當前集合,可以添加新的元素或集合到當前集合中,如果添加的元素在集合中已存在,則該元素只會出現一次,重複的會忽略;

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

# 使用花括號構建set集合

c = {'喬峯',"段譽","虛竹","天龍八部","射鵰英雄傳"}

# 添加元素

c.add("天山姥姥")

c.add(6)

print("c集合的元素個數爲:" , len(c))

print(c)

# 刪除指定元素

c.remove("天山姥姥")

print(c)

print("c集合的元素個數爲:" , len(c))

print("***"*20)

 

 

# 判斷是否包含指定字符串

print("c集合是否包含'喬峯'字符串:" , ("喬峯" in c)) # 輸出True

print("***"*20)

 

# 使用set()函數(構造器)來創建set集合

movies = set()

movies.add("天龍八部")

movies.add("射鵰英雄傳")

print("movies集合的元素:" , movies)

# issubset()方法判斷是否爲子集合

print("movies集合是否爲c的子集合?", movies.issubset(c)) # 輸出False

 

# issuperset()方法判斷是否爲父集合

# issubset和issuperset其實就是倒過來判斷

print("c集合是否完全包含books集合?", c.issuperset(movies)) # 輸出False

# 用c集合減去books集合裏的元素,不改變c集合本身

result1 = c - movies

print(result1)

 

# difference()方法也是對集合做減法,與用-執行運算的效果完全一樣

result2 = c.difference(movies)

print(result2)

 

# 用c集合減去books集合裏的元素,改變c集合本身

c.difference_update(movies)

print("c集合的元素:" , c)

 

# 刪除c集合裏的所有元素

c.clear()

print("c集合的元素:" , c)

print("***"*20)

 

# 直接創建包含元素的集合

d = {"python面向對象", 'python基礎', 'python爬蟲'}

print("d集合的元素:" , d)

 

# intersection()方法也是獲取兩個集合的交集,與用&執行運算的效果完全一樣

inter2 = d.intersection(movies)

print(inter2)

# 計算兩個集合的交集,改變d集合本身

d.intersection_update(movies)

print("d集合的元素:" , d)

print("***"*20)

 

# 將range對象包裝成set集合

e = set(range(5))

f = set(range(3, 7))

print("e集合的元素:" , e)

print("f集合的元素:" , f)

 

# 計算兩個集合的並集,不改變e集合本身

un = e.union(f)

print('e和f執行並集的結果:', un)

# 計算兩個集合的並集,改變e集合本身

e.update(f)

print('e集合的元素:', e)


輸出:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

c集合的元素個數爲: 7

{'天龍八部', 6, '虛竹', '喬峯', '段譽', '天山姥姥', '射鵰英雄傳'}

{'天龍八部', 6, '虛竹', '喬峯', '段譽', '射鵰英雄傳'}

c集合的元素個數爲: 6

************************************************************

c集合是否包含'喬峯'字符串: True

************************************************************

movies集合的元素: {'天龍八部', '射鵰英雄傳'}

movies集合是否爲c的子集合? True

c集合是否完全包含books集合? True

{'喬峯', '段譽', 6, '虛竹'}

{'喬峯', '段譽', 6, '虛竹'}

c集合的元素: {6, '虛竹', '喬峯', '段譽'}

c集合的元素: set()

************************************************************

d集合的元素: {'python爬蟲', 'python基礎', 'python面向對象'}

set()

d集合的元素: set()

************************************************************

e集合的元素: {0, 1, 2, 3, 4}

f集合的元素: {3, 4, 5, 6}

ef執行並集的結果: {0, 1, 2, 3, 4, 5, 6}

e集合的元素: {0, 1, 2, 3, 4, 5, 6}


 


can you

三.set集合運算符

<=:相當於調用 issubset() 方法,判斷前面的 set 集合是否爲後面的 set 集合的子集合。

>=:相當於調用 issuperset() 方法,判斷前面的 set 集合是否爲後面的 set 集合的父集合。

:相當於調用 difference() 方法,用前面的 set 集合減去後面的 set 集合的元素。

&:相當於調用 intersection() 方法,用於獲取兩個 set 集舍的交集。

^:計算兩個集合異或的結果,就是用兩個集合的並集減去交集的元素。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

# 使用花括號構建set集合

c = {'喬峯',"段譽","虛竹","天龍八部","射鵰英雄傳"}

 

# 使用set()函數(構造器)來創建set集合

movies = set()

movies.add("天龍八部")

movies.add("射鵰英雄傳")

print("movies集合的元素:" , movies)

# issubset()方法與<=運算符效果相同

print("movies集合是否爲c的子集合?", (movies <= c)) # 輸出False

print("***"*20)

 

e = set(range(5))

f = set(range(3, 7))

print("e集合的元素:" , e)

print("f集合的元素:" , f)

# 對兩個集合執行異或運算

xor = e ^ f

print('e和f執行xor的結果:', xor)

 

# 直接創建包含元素的集合

d = {"python面向對象", 'python基礎', 'python爬蟲'}

print("d集合的元素:" , d)

# 計算兩個集合的交集,不改變d集合本身

inter1 = d & movies

print(inter1)

輸出結果:

1

2

3

4

5

6

7

8

movies集合的元素: {'天龍八部', '射鵰英雄傳'}

movies集合是否爲c的子集合? True

************************************************************

e集合的元素: {0, 1, 2, 3, 4}

f集合的元素: {3, 4, 5, 6}

ef執行xor的結果: {0, 1, 2, 5, 6}

d集合的元素: {'python基礎', 'python面向對象', 'python爬蟲'}

set()


ojbk

 

猜你喜歡:

1.python列表推導式

2.python字典推導式

3.python 匿名函數lambda

4.python map函數

 

轉載請註明猿說Python » python set集合


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章