即使你刚刚开始学习 Python,你也很可能遇到过 Python 集合。但你知道如何有效地使用它们吗?本文旨在介绍所有主要的 Python 集合操作,让你更好地了解何时以及如何使用这种重要的数据结构。
什么是 Python 集合?
首先,让我们从基础开始。集合是 Python 中的内置类型,具有许多重要特征:
- 集合是无序的。 换句话说,项目是按随机顺序插入的,因此您无法使用索引访问元素。
- 集合仅包含唯一元素。 集合中不允许有重复元素。
- 集合是可变的。 可以修改集合,并且可以在其中添加或删除项目。
- 集合的元素必须是不可变类型。 例如,字符串、整数、浮点数和元组都是集合可接受的类型。
- 集合可以包含不同类型的元素。 例如,你可以在一个集合中包含数字、字符串和元组的混合。
现在是时候了解如何定义和修改 Python 集合了。
在 Python 中创建和更改集合
创建集
有两种方法可以创建集合:您可以使用内置方法
set() function
花括号 定义集合 。以下是一些示例:
# Creating sets using built-in function
set_one = set((0, "one", (2, 3, 4)))
set_one
{(2, 3, 4), 0, 'one'}
# Creating sets using built-in function set_two = set("Game of Thrones") set_two
{' ', 'G', 'T', 'a', 'e', 'f', 'h', 'm', 'n', 'o', 'r', 's'}
# Creating sets using curly braces set_three = {0, "one", (2, 3, 4)} set_three
{(2, 3, 4), 0, 'one'}
# Creating sets using curly braces set_four = {"Game of Thrones"} set_four
{'Game of Thrones'}
的参数需要
set() function
是 一个可迭代 ,它会生成一个对象列表(例如,元组、列表、字符串);这些对象将被插入到集合中。另一方面,如果你使用花括号,对象本身将被手动放置。所以你可能已经发现了应用这两种方法的区别:
-
我们将一个元组传递给
set()
函数来创建set_one
,但我们将对象直接放入花括号中以获得set_three
相同的元素。 -
该
set()
函数将我们传入的字符串视为set_two
可迭代对象,因此结果集合是来自该字符串的字母集合,而花括号将字符串视为集合的不同元素,因此我们将此set_four
字符串作为唯一成员。
另请注意,结果集合是无序的,并且重复值仅在集合中出现一次(如第二个示例中的字母“e”)。
检查集合大小和成员资格
您可以使用该
len()
或
in
检查集合中某个特定元素是否存在
not in
。
# Checking the number of elements in a set len(set_one)
3
# Checking if an element is in a set 0 in set_one
True
# Checking if an element is not in a set 0 not in set_one
False
向集合中添加元素
您可以使用该
add ()
方法将单个元素插入到集合中。如果您想一次将多个对象插入到集合中,请使用该
update()
方法。以下是一些示例:
# Adding a single element using add() method my_set = {'a', 'b', 'c'} my_set.add('d') my_set
{'a', 'b', 'c', 'd'}
# Adding multiple elements using update() method my_set.update('e', 'f', 'g', 'b') my_set
{'a', 'b', 'c', 'd', 'e', 'f', 'g'}
# Adding multiple elements of different types (i.e., adding a tuple and another set) my_set.update(('a', 'h'), {'c', 'i', 'j'}) my_set
{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'}
从集合中删除元素
有多种方法可以从集合中删除项目:
-
请使用该
remove()
方法,如果相应项目不在集合中,则会出现错误消息。 -
如果您想从集合中删除单个元素,但如果给定的项目不在集合中则不需要错误消息,
discard()
请使用该 -
使用该
pop()
方法从集合中删除并返回一个随机元素。 -
使用该
clear()
方法从集合中删除所有项目。
稍后我们将看到如何在不使用循环的情况下从集合中删除多个元素。
# Using remove() to remove an item that doesn't exist in a set my_set.remove('o') my_set
--------------------------------------------------------------------------- KeyError Traceback (most recent call last)in () 1 # Using remove() to remove an item that doesn't exist in a set ----> 2 my_set.remove('o') 3 my_set KeyError: 'o'
# Using discard() to remove an item that doesn't exist in a set my_set.discard('o') my_set
{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'}
# Using pop() to remove and return a random element print(my_set.pop()) print(my_set)
j {'d', 'b', 'e', 'c', 'a', 'i', 'h', 'g', 'f'}
# Using clear() to remove all elements from a set my_set.clear() my_set
set()
这些是修改集合的基本方法。现在让我们继续学习一些更高级的 Python 集合运算和方法。
Python 集合运算和方法
我们可以使用 Python 集合执行数学集合运算,如 并集 , 、交集 , 差集 和 对称差集 。这些运算可以使用运算符或方法执行。
但是,这两种方法之间有一个重要的区别:运算符只能对集合起作用,而方法接受任何可迭代对象(例如列表、元组)作为参数,将其转换为集合,然后执行操作。
如果您还不清楚,请不要担心——我们将在下面看一些示例。
设置并集
如果有两个集合,
first_set
和
second_set
,则这两个集合的并集是 两个集合中所有元素 方法或
union()
获取两个集合的并集
|
。但是,如果您想获取集合和列表的并集,则运算
|
符不起作用,您需要使用方法
union()
。
# Initializing sets first_set = {1, 3, 5, 7, 9} second_set = {2, 4, 6, 8, 10}
# Set union using | operator first_set | second_set
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
# Set union using union() method first_set.union(second_set)
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
# Getting a union of a set and a list first_set.union([2, 4, 6, 8, 10])
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
设置交点
两个集合的交集
first_set
和
second_set
两个集合共有的 所有元素的集合 。此操作可以使用 & 运算符或方法执行
intersection()
。
# Initializing sets first_set = {1, 2, 3, 4, 5} second_set = {4, 5, 6, 7, 8} third_set = {4, 5, 9, 10}
# Performing intersection using & operator first_set & second_set & third_set
{4, 5}
# Performing inteesection using intersection() method first_set.intersection(second_set, third_set)
{4, 5}
如您所见,该
intersection()
方法和 & 运算符都允许您为两个以上的集合创建交集。请注意,这不仅适用于集合交集,还适用于其他运算。
集合差集
和
first_set
的差
second_set
仅存在于 而不存在于 的
first_set
所有元素的集合
second_set
。您可以使用 – 运算符或方法创建两个集合的差
difference()
。
# Initializing sets first_set = {1, 2, 3, 4, 5} second_set = {4, 5, 6, 7, 8}
# Performing difference using - operator print(first_set - second_set) print(second_set - first_set)
{1, 2, 3} {8, 6, 7}
# Performing difference using difference() method print(first_set.difference(second_set)) print(second_set.difference(first_set))
{1, 2, 3} {8, 6, 7}
从示例中可以看出,执行集合差运算时集合的顺序很重要。
集合对称差
对称差分运算允许你获取 elements that are either in
first_set
or in
second_set
but not in both 。同样,你有两个选项可以执行此操作:
symmetric_difference()
方法或
^
运算符。
# Initializing sets first_set = {1, 2, 3, 4, 5} second_set = {4, 5, 6, 7, 8}
# Performing symmetric difference using ^ operator first_set^second_set
{1, 2, 3, 6, 7, 8}
# Performing symmetric difference using symmetric_difference() method first_set.symmetric_difference(second_set)
{1, 2, 3, 6, 7, 8}
更新操作
我们上面讨论的每种运算(并集、交集、差集和对称差集)也可用于 更新集合 。我们只需要对运算符(|=、&=、-=、^=)或相应的方法使用增强的赋值形式
update()
,
intersection_update()
,
difference_update()
。
symmetric_difference_update()
以下是一些示例:
# Initializing sets first_set = {1, 2, 3, 4, 5} second_set = {4, 5, 6, 7, 8}
# Modifying a set by union using update() method first_set.update(second_set) first_set
{1, 2, 3, 4, 5, 6, 7, 8}
# Modifying a set by intersection using an operator first_set &= second_set first_set
{4, 5, 6, 7, 8}
# Modifying a set by difference using difference_update() method first_set.difference_update((6, 7, 8)) first_set
{4, 5}
# Modifying a set by symmetric difference using an operator first_set ^= second_set first_set
{6, 7, 8}
请注意,我们如何
first_set
通过在传递给方法的参数的元组中指定要
difference_update()
。
其他设置方法
让我们简要回顾一下有助于您确定集合之间关系的一些方法:
-
isdisjoint()
如果两个集合有任何共同元素,则返回 true。 -
issubset()
或者<=
如果第一个集合是第二个集合的子集,则运算符返回 true。 -
issuperset()
或者>=
如果第一个集合包含第二个集合的每个元素,则运算符返回 true。
Python 冻结集
如果您曾尝试使用集合元素作为字典键,那么您就会知道这是行不通的,因为 集合是可变的,因此 。幸运的是,Python 还有另一种名为的内置类型
frozenset
,它具有集合的所有属性,但不可变。 冻结集是可哈希的 ,并被接受为字典的键。查看
Python Basics. Part 2
课程,了解有关创建字典的更多信息。
您可以使用函数创建冻结集
frozenset()
。由于冻结集是不可变的,因此它没有添加或删除元素的方法。但是,更新操作可以用于冻结集。这是因为这些操作不会修改原始集,而是将集分配给新对象。
包起来
现在您了解了如何在 Python 中定义集合对象、如何修改集合以及可以对集合执行哪些类型的操作。您还了解了 Python 集合的主要特征,并且应该对何时集合是合适的选择有更好的感觉。
现在你需要做的就是练习!查看 Python Basics. Part 3 课程,其中包含许多交互式练习,涵盖集合、元组和日期/时间对象。
如果您还需要复习列表、字典和文本文件, Python Basics. Part 2 将为您提供易于理解的解释和大量的实践练习。
发表评论 取消回复