溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python set集合介紹

發(fā)布時(shí)間:2020-05-25 14:00:29 來源:億速云 閱讀:240 作者:鴿子 欄目:編程語言

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

一.set集合簡介

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

1.元素不允許重復(fù)

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(個(gè)人博客地址): shuopython.com

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

@Github:www.github.com

 

@File:python_set.py

@Time:2019/11/09 21:25

 

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

"""

 

# 創(chuàng)建一個(gè)空集合set

set_a = set()

# 打印集合set

print(set_a)

# 查看類型

print(type(set_a))

print("***"*20)

 

# 創(chuàng)建一個(gè)集合

set_b = {"猿說python",False}

print(type(set_b))

print(set_b)

print("***"*20)

 

# 創(chuàng)建一個(gè)字典

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

print(type(dict_b))

print(dict_b)


輸出結(jié)果:

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 都是由{}構(gòu)成,注意字典由鍵值對key/value構(gòu)成,而集合確是由一個(gè)一個(gè)數(shù)據(jù)構(gòu)成,和列表的元素類似!

二.set集合常用函數(shù)

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

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

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

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

copy() — 拷貝一個(gè)集合;

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

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

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

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

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

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

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

pop() — 隨機(jī)移除元素;

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

union() — 返回兩個(gè)集合的并集;

update() — 用于修改當(dāng)前集合,可以添加新的元素或集合到當(dāng)前集合中,如果添加的元素在集合中已存在,則該元素只會出現(xiàn)一次,重復(fù)的會忽略;

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

# 使用花括號構(gòu)建set集合

c = {'喬峰',"段譽(yù)","虛竹","天龍八部","射雕英雄傳"}

# 添加元素

c.add("天山姥姥")

c.add(6)

print("c集合的元素個(gè)數(shù)為:" , len(c))

print(c)

# 刪除指定元素

c.remove("天山姥姥")

print(c)

print("c集合的元素個(gè)數(shù)為:" , len(c))

print("***"*20)

 

 

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

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

print("***"*20)

 

# 使用set()函數(shù)(構(gòu)造器)來創(chuàng)建set集合

movies = set()

movies.add("天龍八部")

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

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

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

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

 

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

# issubset和issuperset其實(shí)就是倒過來判斷

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

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

result1 = c - movies

print(result1)

 

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

result2 = c.difference(movies)

print(result2)

 

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

c.difference_update(movies)

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

 

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

c.clear()

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

print("***"*20)

 

# 直接創(chuàng)建包含元素的集合

d = {"python面向?qū)ο?quot;, 'python基礎(chǔ)', 'python爬蟲'}

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

 

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

inter2 = d.intersection(movies)

print(inter2)

# 計(jì)算兩個(gè)集合的交集,改變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)

 

# 計(jì)算兩個(gè)集合的并集,不改變e集合本身

un = e.union(f)

print('e和f執(zhí)行并集的結(jié)果:', un)

# 計(jì)算兩個(gè)集合的并集,改變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集合的元素個(gè)數(shù)為: 7

{'天龍八部', 6, '虛竹', '喬峰', '段譽(yù)', '天山姥姥', '射雕英雄傳'}

{'天龍八部', 6, '虛竹', '喬峰', '段譽(yù)', '射雕英雄傳'}

c集合的元素個(gè)數(shù)為: 6

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

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

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

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

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

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

{'喬峰', '段譽(yù)', 6, '虛竹'}

{'喬峰', '段譽(yù)', 6, '虛竹'}

c集合的元素: {6, '虛竹', '喬峰', '段譽(yù)'}

c集合的元素: set()

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

d集合的元素: {'python爬蟲', 'python基礎(chǔ)', 'python面向?qū)ο?#39;}

set()

d集合的元素: set()

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

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

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

ef執(zhí)行并集的結(jié)果: {0, 1, 2, 3, 4, 5, 6}

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


 三.set集合運(yùn)算符

<=:相當(dāng)于調(diào)用 issubset() 方法,判斷前面的 set 集合是否為后面的 set 集合的子集合。

>=:相當(dāng)于調(diào)用 issuperset() 方法,判斷前面的 set 集合是否為后面的 set 集合的父集合。

:相當(dāng)于調(diào)用 difference() 方法,用前面的 set 集合減去后面的 set 集合的元素。

&:相當(dāng)于調(diào)用 intersection() 方法,用于獲取兩個(gè) set 集舍的交集。

^:計(jì)算兩個(gè)集合異或的結(jié)果,就是用兩個(gè)集合的并集減去交集的元素。

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

# 使用花括號構(gòu)建set集合

c = {'喬峰',"段譽(yù)","虛竹","天龍八部","射雕英雄傳"}

 

# 使用set()函數(shù)(構(gòu)造器)來創(chuàng)建set集合

movies = set()

movies.add("天龍八部")

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

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

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

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

print("***"*20)

 

e = set(range(5))

f = set(range(3, 7))

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

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

# 對兩個(gè)集合執(zhí)行異或運(yùn)算

xor = e ^ f

print('e和f執(zhí)行xor的結(jié)果:', xor)

 

# 直接創(chuàng)建包含元素的集合

d = {"python面向?qū)ο?quot;, 'python基礎(chǔ)', 'python爬蟲'}

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

# 計(jì)算兩個(gè)集合的交集,不改變d集合本身

inter1 = d & movies

print(inter1)

輸出結(jié)果:

1

2

3

4

5

6

7

8

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

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

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

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

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

ef執(zhí)行xor的結(jié)果: {0, 1, 2, 5, 6}

d集合的元素: {'python基礎(chǔ)', 'python面向?qū)ο?#39;, 'python爬蟲'}

set()


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI