Python 集合
Python 集合
Python 集合是无序项目的集合。集合中的每个元素必须是唯一的、不可变的,并且集合移除重复的元素。集合是可变的,这意味着我们可以在它创建后修改它。
与 Python 中的其他集合不同,集合的元素没有附加索引,即我们不能通过索引直接访问集合的任何元素。但是,我们可以一起打印它们,或者我们可以通过循环集合来获得元素列表。
创建集合
可以通过用花括号{}将逗号分隔的不可变项括起来来创建集合。Python 还提供了 set()方法,可用于通过传递的序列创建集合。
示例 1:使用大括号
Days = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"} |
输出:
{'Friday', 'Tuesday', 'Monday', 'Saturday', 'Thursday', 'Sunday', 'Wednesday'} |
示例 2:使用 set()方法
Days = set(["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]) |
输出:
{'Friday', 'Wednesday', 'Thursday', 'Saturday', 'Monday', 'Tuesday', 'Sunday'} |
它可以包含任何类型的元素,如整数、浮点、元组等。但是可变元素(列表、字典、集合)不能是集合的成员。考虑下面的例子。
# Creating a set which have immutable elements |
输出:
<class 'set'> |
在上面的代码中,我们创建了两个集合,集合 集合 有不可变元素,set2 有一个可变元素作为列表。在检查 set2 的类型时,它引发了一个错误,这意味着 set 只能包含不可变的元素。
创建空集合有点不同,因为空的大括号{}也用于创建字典。所以 Python 提供了 set()方法,在没有参数的情况下创建一个空集合。
# Empty curly braces will create dictionary |
输出:
<class 'dict'> |
让我们看看如果我们向集合提供重复的元素会发生什么。
set5 = {1,2,4,4,5,8,9,9,10} |
输出:
Return set with unique elements: {1, 2, 4, 5, 8, 9, 10} |
在上面的代码中,我们可以看到 set5 由多个重复的元素组成,当我们打印它时,从集合中移除重复。
向集合中添加项目
Python 提供了 add() 方法和 update() 方法,可用于向集合中添加特定的项目。add()方法用于添加单个元素,而 update()方法用于向集合中添加多个元素。考虑下面的例子。
示例:1 -使用 add()方法
Months = set(["January","February", "March", "April", "May", "June"]) |
输出:
printing the original set ... |
要在集合中添加多个项目,Python 提供了 update() 方法。它接受 iterable 作为参数。
考虑下面的例子。
示例- 2 使用 update()函数
Months = set(["January","February", "March", "April", "May", "June"]) |
输出:
printing the original set ... |
从集合中移除项目
Python 提供了 discard() 方法和 remove() 方法。这些函数之间的区别,使用 discard()函数如果集合中不存在该项,则集合保持不变,而 remove()方法将通过一个错误。
考虑下面的例子。
示例-1 使用discard()方法
months = set(["January","February", "March", "April", "May", "June"]) |
输出:
printing the original set ... |
Python 还提供了 remove() 方法来从集合中移除项目。考虑以下示例,使用 remove() 方法移除项目。
示例-2 使用 remove()函数
months = set(["January","February", "March", "April", "May", "June"]) |
输出:
printing the original set ... |
我们还可以使用 pop()方法移除该项。一般来说,pop()方法总是会删除最后一项,但是集合是无序的,我们无法确定从集合中弹出哪个元素。
考虑以下示例,使用 pop()方法从集合中移除该项。
Months = set(["January","February", "March", "April", "May", "June"]) |
输出:
printing the original set ... |
在上面的代码中,Months集合的最后一个元素是March,但是 pop()方法删除了June和 January,因为集合是无序的,pop()方法无法确定集合的最后一个元素。
Python 提供了 clear()方法来从集合中移除所有项目。
考虑下面的例子。
Months = set(["January","February", "March", "April", "May", "June"]) |
输出:
printing the original set ... |
丢弃()和移除()之间的区别
尽管 discard() 和 remove() 方法都执行相同的任务,但是 discard()和 remove()之间有一个主要区别。
如果要使用 discard()从集合中删除的密钥在集合中不存在,Python 不会给出错误。程序保持其控制流程。
另一方面,如果要使用 remove()从集合中删除的项目在集合中不存在,Python 将会引发错误。
考虑下面的例子。
示例-
Months = set(["January","February", "March", "April", "May", "June"]) |
输出:
printing the original set ... |
Python 集合运算
集合可以进行数学运算,如并集、交集、差集和对称差集。Python 提供了用操作符或方法执行这些操作的工具。我们将这些操作描述如下。
两个集合的并集
两个集合的并集是使用管道(|)运算符计算的。这两个集合的并集包含这两个集合中存在的所有项。
考虑下面的例子来计算两个集合的并集。
例 1:使用 |运算符
Days1 = {"Monday","Tuesday","Wednesday","Thursday", "Sunday"} |
输出:
{'Friday', 'Sunday', 'Saturday', 'Tuesday', 'Wednesday', 'Monday', 'Thursday'} |
Python 还提供了 union() 方法,也可以用来计算两个集合的并集。考虑下面的例子。
例 2:使用 union()方法
Days1 = {"Monday","Tuesday","Wednesday","Thursday"} |
输出:
{'Friday', 'Monday', 'Tuesday', 'Thursday', 'Wednesday', 'Sunday', 'Saturday'} |
两个集合的交集
两个集合的交集可以通过 & 操作符或 intersection() 进行。两个集合的交集被给出为两个集合中公共的元素的集合。
考虑下面的例子。
例 1:使用&算子
Days1 = {"Monday","Tuesday", "Wednesday", "Thursday"} |
输出:
{'Monday', 'Tuesday'} |
例 2:使用交集()方法
set1 = {"Devansh","John", "David", "Martin"} |
输出:
{'Martin', 'David'} |
例 3:
set1 = {1,2,3,4,5,6,7} |
输出:
{1,2,5} |
intersection_update()方法
intersection_update() 方法从原始集合中移除两个集合中不存在的项目(如果指定了多个集合,则移除所有集合)。
intersection_update() 方法不同于intersection()方法,因为它通过移除不需要的项目来修改原始集合,另一方面,intersection()方法返回新的集合。
考虑下面的例子。
a = {"Devansh", "bob", "castle"} |
输出:
{'castle'} |
两套之间的差异
两个集合的差可以用减法(-)运算符或 difference() 方法计算。假设有两个集合 A 和 B,不同的是 A-B 表示结果集合将获得集合 B 中不存在的元素 A
考虑下面的例子。
例 1:使用减法(-)运算符
Days1 = {"Monday", "Tuesday", "Wednesday", "Thursday"} |
输出:
{'Thursday', 'Wednesday'} |
例 2:使用difference()方法
Days1 = {"Monday", "Tuesday", "Wednesday", "Thursday"} |
输出:
{'Thursday', 'Wednesday'} |
两组对称差
两组对称差用^算子或 symmetric_difference() 法计算。集合的对称差,它去掉了存在于两个集合中的元素。考虑以下示例:
示例- 1:使用^算子
a = {1,2,3,4,5,6} |
输出:
{3, 4, 5, 6, 8, 9, 10} |
例- 2:使用symmetric_difference()方法
a = {1,2,3,4,5,6} |
输出:
{3, 4, 5, 6, 8, 9, 10} |
设置比较
Python 允许我们对集合使用比较运算符,即、<=, > =、==,通过比较运算符,我们可以检查一个集合是子集、超集还是其他集合的等价集合。根据集合中存在的项目,返回布尔值 true 或 false。
考虑下面的例子。
Days1 = {"Monday", "Tuesday", "Wednesday", "Thursday"} |
输出:
True |
FrozenSets
冻结集是正规集的不可变形式,即冻结集的项目不能改变,因此它可以用作字典中的关键字。
创建后不能更改冻结集的元素。我们不能通过使用 add()或 remove()等方法来更改或追加冻结集的内容。
frozenset()方法用于创建 frozenset 对象。可迭代序列被传递到这个方法中,该方法被转换成冻结集作为该方法的返回类型。
考虑以下示例来创建冻结集。
Frozenset = frozenset([1,2,3,4,5]) |
输出:
<class 'frozenset'> |
为字典做准备
如果我们将字典作为 frozenset()方法中的序列传递,它将只从字典中获取键,并返回一个 frozenset,该 frozen set 包含字典的键作为其元素。
考虑下面的例子。
Dictionary = {"Name":"John", "Country":"USA", "ID":101} |
输出:
<class 'dict'> |
设置编程示例
示例- 1: 编写一个程序,从集合中删除给定的数字。
my_set = {1,2,3,4,5,6,12,24} |
输出:
Enter the number you want to remove:12 |
示例- 2: 编写一个程序,向集合中添加多个元素。
set1 = set([1,2,4,"John","CS"]) |
输出:
{1, 2, 4, 'Apple', 'John', 'CS', 'Mango', 'Grapes'} |
例- 3: 写一个程序,求两个集合的并集。
set1 = set(["Peter","Joseph", 65,59,96]) |
输出:
{96, 65, 2, 'Joseph', 1, 'Peter', 59} |
例- 4: 写一个程序,找出两个集合的交集。
set1 = {23,44,56,67,90,45,"Javatpoint"} |
输出:
{56, 23} |
示例- 5: 编写向 frozenset 添加元素的程序。
set1 = {23,44,56,67,90,45,"Javatpoint"} |
输出:
TypeError: 'frozenset' object does not support item assignment |
上面的代码引发了一个错误,因为 frozensets 是不可变的,创建后不能更改。
例- 6: 编写程序,找到subset、superset。
set1 = set(["Peter","James","Camroon","Ricky","Donald"]) |
输出:
False |
Python 内置的集合方法
Python 包含以下用于集合的方法。
方法 | 描述 |
---|---|
add(item) | 它向集合中添加一个项目。如果该项目已经存在于集合中,则没有效果。 |
clear() | 它会从集合中删除所有项目。 |
copy() | 它返回集合的一个浅拷贝。 |
difference_update(…) | 它通过删除指定集合中的所有项目来修改该集合。 |
discard(item) | 它从集合中移除指定的项目。 |
intersection() | 它返回一个只包含两个集合的公共元素的新集合。(如果指定了两个以上的集合,则为所有集合)。 |
intersection_update(…) | 它从原始集合中删除两个集合中不存在的项目(如果指定了多个集合,则删除所有集合)。 |
Isdisjoint(…) | 如果两个集合有空交集,则返回真。 |
Issubset(…) | 报告另一个集合是否包含此集合。 |
Issuperset(…) | 报告此集合是否包含另一个集合。 |
pop() | 移除并返回任意集合元素,即该集合的最后一个元素。如果集合为空,则引发键错误。 |
remove(item) | 从集合中移除元素;它必须是一个成员。如果元素不是成员,则引发键错误。 |
symmetric_difference(…) | 从集合中移除元素;它必须是一个成员。如果元素不是成员,则引发键错误。 |
symmetric_difference_update(…) | 用自身和另一个的对称差更新一个集合。 |
union(…) | 将集合的并集作为新集合返回。(即任一集合中的所有元素。) |
update() | 用自己和他人的联合来更新集合。 |