个性化阅读
专注于IT技术分析

Python集合set介绍和用法

本文概述

python中的set可以定义为花括号中包含的各种项目的无序集合。集合中的元素不能重复。 python集合的元素必须是不可变的。

与python中的其他集合不同, 该集合的元素没有附加索引, 即, 我们无法通过索引直接访问集合的任何元素。但是, 我们可以将它们全部打印在一起, 也可以通过遍历集合来获取元素列表。

创建一个集合

可以通过用花括号将逗号分隔的项目括起来来创建集合。 Python还提供了set方法, 可用于通过传递的序列来创建set。

示例1:使用花括号

Days = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}
print(Days)
print(type(Days))
print("looping through the set elements ... ")
for i in Days:
	print(i)

输出

{'Friday', 'Tuesday', 'Monday', 'Saturday', 'Thursday', 'Sunday', 'Wednesday'}
<class 'set'>
looping through the set elements ... 
Friday
Tuesday
Monday
Saturday
Thursday
Sunday
Wednesday

示例2:使用set()方法

Days = set(["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"])
print(Days)
print(type(Days))
print("looping through the set elements ... ")
for i in Days:
	print(i)

输出

{'Friday', 'Wednesday', 'Thursday', 'Saturday', 'Monday', 'Tuesday', 'Sunday'}
<class 'set'>
looping through the set elements ... 
Friday
Wednesday
Thursday
Saturday
Monday
Tuesday
Sunday

Python Set操作

在前面的示例中, 我们讨论了如何在python中创建集合。但是, 我们可以对python集执行各种数学运算, 例如并集, 交集, 差等。

将项目添加到集合中

Python提供了add()方法, 可用于将某些特定项目添加到集合中。考虑以下示例。

例子

Months = set(["January", "February", "March", "April", "May", "June"])
print("\nprinting the original set ... ")
print(Months)
print("\nAdding other months to the set...");
Months.add("July");
Months.add("August");
print("\nPrinting the modified set...");
print(Months)
print("\nlooping through the set elements ... ")
for i in Months:
	print(i)

输出

printing the original set ... 
{'February', 'May', 'April', 'March', 'June', 'January'}

Adding other months to the set...

Printing the modified set...
{'February', 'July', 'May', 'April', 'March', 'August', 'June', 'January'}

looping through the set elements ... 
February
July
May
April
March
August
June
January

要在集合中添加多个项目, Python提供了update()方法。

考虑以下示例。

例子

Months = set(["January", "February", "March", "April", "May", "June"])
print("\nprinting the original set ... ")
print(Months)
print("\nupdating the original set ... ")
Months.update(["July", "August", "September", "October"]);
print("\nprinting the modified set ... ") 
print(Months);

输出

printing the original set ... 
{'January', 'February', 'April', 'May', 'June', 'March'}

updating the original set ... 

printing the modified set ... 
{'January', 'February', 'April', 'August', 'October', 'May', 'June', 'July', 'September', 'March'}

从集合中删除项目

Python提供了throw()方法, 该方法可用于从集合中删除项目。

考虑以下示例。

例子

Months = set(["January", "February", "March", "April", "May", "June"])
print("\nprinting the original set ... ")
print(Months)
print("\nRemoving some months from the set...");
Months.discard("January");
Months.discard("May");
print("\nPrinting the modified set...");
print(Months)
print("\nlooping through the set elements ... ")
for i in Months:
	print(i)

输出

printing the original set ... 
{'February', 'January', 'March', 'April', 'June', 'May'}

Removing some months from the set...

Printing the modified set...
{'February', 'March', 'April', 'June'}

looping through the set elements ... 
February
March
April
June

Python还提供了remove()方法来从集合中删除项目。考虑以下示例, 使用remove()方法删除项目。

例子

Months = set(["January", "February", "March", "April", "May", "June"])
print("\nprinting the original set ... ")
print(Months)
print("\nRemoving some months from the set...");
Months.remove("January");
Months.remove("May");
print("\nPrinting the modified set...");
print(Months)

输出

printing the original set ... 
{'February', 'June', 'April', 'May', 'January', 'March'}

Removing some months from the set...

Printing the modified set...
{'February', 'June', 'April', 'March'}

我们还可以使用pop()方法删除该项目。但是, 此方法将始终删除最后一项。

考虑以下示例, 从集合中删除最后一个项目。

Months = set(["January", "February", "March", "April", "May", "June"])
print("\nprinting the original set ... ")
print(Months)
print("\nRemoving some months from the set...");
Months.pop();
Months.pop();
print("\nPrinting the modified set...");
print(Months)

输出

printing the original set ... 
{'June', 'January', 'May', 'April', 'February', 'March'}

Removing some months from the set...

Printing the modified set...
{'May', 'April', 'February', 'March'}

Python提供了clear()方法来删除集合中的所有项目。

考虑以下示例。

Months = set(["January", "February", "March", "April", "May", "June"])
print("\nprinting the original set ... ")
print(Months)
print("\nRemoving all the items from the set...");
Months.clear()
print("\nPrinting the modified set...")
print(Months)

输出

printing the original set ... 
{'January', 'May', 'June', 'April', 'March', 'February'}

Removing all the items from the set...

Printing the modified set...
set()

Dispose()和remove()之间的区别

尽管discard()和remove()方法都执行相同的任务, 但是discard()和remove()之间有一个主要区别。

如果要使用set()从集合中删除的键在集合中不存在, 则python不会给出错误。该程序将保持其控制流。

另一方面, 如果集合中不存在要使用remove()从集合中删除的项目, 则python将给出错误。

考虑以下示例。

例子

Months = set(["January", "February", "March", "April", "May", "June"])
print("\nprinting the original set ... ")
print(Months)
print("\nRemoving items through discard() method...");
Months.discard("Feb"); #will not give an error although the key feb is not available in the set
print("\nprinting the modified set...")
print(Months)
print("\nRemoving items through remove() method...");
Months.remove("Jan") #will give an error as the key jan is not available in the set. 
print("\nPrinting the modified set...")
print(Months)

输出

printing the original set ... 
{'March', 'January', 'April', 'June', 'February', 'May'}

Removing items through discard() method...

printing the modified set...
{'March', 'January', 'April', 'June', 'February', 'May'}

Removing items through remove() method...
Traceback (most recent call last):
  File "set.py", line 9, in 
           
            
    Months.remove("Jan")
KeyError: 'Jan'

两套并集

使用或(|)运算符可计算两组的并集。这两个集合的并集包含两个集合中存在的所有项目。

考虑下面的示例来计算两个集合的并集。

示例1:使用union |算子

Days1 = {"Monday", "Tuesday", "Wednesday", "Thursday"}
Days2 = {"Friday", "Saturday", "Sunday"}
print(Days1|Days2) #printing the union of the sets

输出

{'Friday', 'Sunday', 'Saturday', 'Tuesday', 'Wednesday', 'Monday', 'Thursday'}

Python还提供了union()方法, 该方法还可用于计算两个集合的并集。考虑以下示例。

示例2:使用union()方法

Days1 = {"Monday", "Tuesday", "Wednesday", "Thursday"}
Days2 = {"Friday", "Saturday", "Sunday"}
print(Days1.union(Days2)) #printing the union of the sets

输出

{'Friday', 'Monday', 'Tuesday', 'Thursday', 'Wednesday', 'Sunday', 'Saturday'}

两套相交

&(交集)运算符用于计算python中两个集合的交集。给出两个集合的交集作为两个集合中共有的元素的集合。

考虑以下示例。

示例1:使用&运算符

set1 = {"Ayush", "John", "David", "Martin"}
set2 = {"Steve", "Milan", "David", "Martin"}
print(set1&set2) #prints the intersection of the two sets

输出

{'Martin', 'David'}

示例2:使用intersection()方法

set1 = {"Ayush", "John", "David", "Martin"}
set2 = {"Steave", "Milan", "David", "Martin"}
print(set1.intersection(set2)) #prints the intersection of the two sets

输出

{'Martin', 'David'}

section_update()方法

section_update()方法从原始集中删除两个集中都不存在的项目(如果指定了多个, 则为所有集中)。

Intersection_update()方法与intersection()方法的不同之处在于, 它通过删除不需要的项来修改原始集合, 而intersection()方法则返回一个新集合。

考虑以下示例。

a = {"ayush", "bob", "castle"}
b = {"castle", "dude", "emyway"}
c = {"fuson", "gaurav", "castle"}

a.intersection_update(b, c)

print(a)

输出

{'castle'}

两组差异

可以通过使用减法(-)运算符来计算两组的差。通过从集合1中删除集合2中存在的所有元素, 可以获得结果集合。

考虑以下示例。

示例1:使用减法(-)运算符

Days1 = {"Monday", "Tuesday", "Wednesday", "Thursday"}
Days2 = {"Monday", "Tuesday", "Sunday"}
print(Days1-Days2) #{"Wednesday", "Thursday" will be printed}

输出

{'Thursday', 'Wednesday'}

示例2:使用difference()方法

Days1 = {"Monday", "Tuesday", "Wednesday", "Thursday"}
Days2 = {"Monday", "Tuesday", "Sunday"}
print(Days1.difference(Days2)) # prints the difference of the two sets Days1 and Days2

输出

{'Thursday', 'Wednesday'}

设置比较

Python允许我们对集合使用比较运算符, 即<, >, <=, > =和==, 通过它们我们可以检查集合是子集, 超集还是等效于其他集。根据集合中存在的项目返回布尔值true或false。

考虑以下示例。

Days1 = {"Monday", "Tuesday", "Wednesday", "Thursday"}
Days2 = {"Monday", "Tuesday"}
Days3 = {"Monday", "Tuesday", "Friday"}

#Days1 is the superset of Days2 hence it will print true. 
print (Days1>Days2) 

#prints false since Days1 is not the subset of Days2 
print (Days1<Days2)

#prints false since Days2 and Days3 are not equivalent 
print (Days2 == Days3)

输出

True
False
False

冻结集

冻结集是普通集的不变形式, 即, 冻结集的项不能更改, 因此可以用作字典中的键。

创建后, 冻结集合的元素无法更改。我们不能通过使用诸如add()或remove()之类的方法来更改或追加冻结集的内容。

Frozenset()方法用于创建Frozenset对象。可迭代序列传递给此方法, 该方法将转换为冻结集, 作为该方法的返回类型。

考虑以下示例以创建冻结集。

Frozenset = frozenset([1, 2, 3, 4, 5]) 
print(type(Frozenset))
print("\nprinting the content of frozen set...")
for i in Frozenset:
	print(i);
Frozenset.add(6) #gives an error since we cannot change the content of Frozenset after creation

输出

<class 'frozenset'>

printing the content of frozen set...
1
2
3
4
5
Traceback (most recent call last):
  File "set.py", line 6, in <module>
    Frozenset.add(6) #gives an error since we can change the content of Frozenset after creation 
AttributeError: 'frozenset' object has no attribute 'add'

字典的Frozenset

如果将字典作为序列传递给Frozenset()方法内的序列, 它将仅接收字典中的键, 并返回一个包含字典键作为其元素的Frozenset。

考虑以下示例。

Dictionary = {"Name":"John", "Country":"USA", "ID":101} 
print(type(Dictionary))
Frozenset = frozenset(Dictionary); #Frozenset will contain the keys of the dictionary
print(type(Frozenset))
for i in Frozenset: 
	print(i)

输出

<class 'dict'>
<class 'frozenset'>
Name
Country
ID

Python内置设置方法

Python包含以下用于集合的方法。

SN Method Description
1 add(item) 它将一个项目添加到集合中。如果该商品已经存在于集合中, 则没有任何效果。
2 clear() 它将删除集合中的所有项目。
3 copy() 它返回集合的浅表副本。
4 差异更新(….) 它通过删除指定集中还存在的所有项目来修改此集中。
5 discard(item) 它从集中删除指定的项目。
6 intersection() 它返回一个仅包含两个集合的公共元素的新集合。 (如果指定了两个以上的所有集合)。
7 交集更新(….) 它将从原始集中删除两个集中都没有的项目(如果指定了多个, 则所有集中)。
8 冰脱节(….) 如果两个集合的交点为空, 则返回True。
9 Issubset(….) 报告另一个集合是否包含该集合。
10 Issuperset(….) 报告此集合是否包含另一个集合。
11 pop() 移除并返回任意set元素, 该元素是set的最后一个元素。如果集合为空, 则引发KeyError。
12 remove(item) 从集合中删除一个元素;它必须是成员。如果元素不是成员, 则引发KeyError。
13 symmetric_difference(….) 从集合中删除一个元素;它必须是成员。如果元素不是成员, 则引发KeyError。
14 symmetric_difference_update(….) 用本身和另一个的对称差异更新一个集合。
15 联盟(….) 将集合的并集作为新集合返回。 (即任一组中的所有元素。)
16 update() 用本身和其他元素的并集更新集合。
赞(0) 打赏
未经允许不得转载:srcmini » Python集合set介绍和用法
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏