即使你刚刚开始学习 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 将为您提供易于理解的解释和大量的实践练习。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部