Python 集合是一种数据结构,允许你使用唯一元素的集合。集合对于诸如从列表中移除重复项、测试元素的成员资格以及执行并集和交集等集合操作之类的任务非常有用。在 Python 中,集合是可变的和可迭代的,这使得它们用途广泛且易于使用。让我们探索 Python 集合的基础知识以及主要的 Python 集合方法,以帮助你充分利用编程项目中的这种数据结构。
什么是集合?
集合是唯一元素的集合,非常类似于数学集合。集合是包含在花括号 {} 中的不重复元素的无序可变集合。集合可以包含任何可散列元素,例如 整数、浮点数、字符串,甚至其他集合。
例如,你可以按如下方式创建整数集合
my_set = {1, 2, 3, 4, 5}
或者,你可以按如下方式创建字符串集合
my_set = {'apple', 'banana', 'orange', 'grape'}
你可以对集合执行各种操作,例如添加或移除元素、查找集合的交集或并集,或检查元素是否是集合的成员。
你可以使用 Python 的集合操作和方法进行数据操作。以下是其中一些最常用的操作和方法
集合操作
-
union()
或|
:返回一个包含来自两个集合(或其他可迭代对象)的所有元素的集合,并移除重复项。示例:set1 = {1, 2, 3}; set2 = {3, 4, 5}; set3 = set1.union(set2); print(set3)
将输出{1, 2, 3, 4, 5}
。 -
intersection()
或&
:返回一个仅包含两个集合中公共元素的集合。示例:set1 = {1, 2, 3}; set2 = {3, 4, 5}; set3 = set1.intersection(set2); print(set3)
将输出{3}
。 -
difference()
或-
:返回一个包含第一个集合中但不在第二个集合中的元素的集合。示例:set1 = {1, 2, 3}; set2 = {3, 4, 5}; set3 = set1.difference(set2); print(set3)
将输出{1, 2}
。 -
symmetric_difference()
或^
:返回一个包含两个集合中任一集合中但不在两个集合中都有的元素的集合。示例:set1 = {1, 2, 3}; set2 = {3, 4, 5}; set3 = set1.symmetric_difference(set2); print(set3)
将输出{1, 2, 4, 5}
。 -
issubset()
:如果一个集合的所有元素都包含在另一个集合中,则返回 True。示例:set1 = {1, 2, 3}; set2 = {1, 2}; print(set2.issubset(set1))
将输出True
。 -
issuperset()
:如果一个集合包含另一个集合的所有元素,则返回 True。示例:set1 = {1, 2, 3}; set2 = {1, 2}; print(set1.issuperset(set2))
将输出True
。
集合方法
-
add()
:向集合中添加一个元素。如果元素已存在于集合中,则集合保持不变。示例:my_set = {1, 2, 3}; my_set.add(4); print(my_set)
将输出{1, 2, 3, 4}
。 -
remove()
:从集合中移除指定元素。如果元素不在集合中,则引发 KeyError。示例:my_set = {1, 2, 3}; my_set.remove(2); print(my_set)
将输出{1, 3}
。 -
discard()
:从集合中移除指定元素。如果元素不在集合中,则不引发错误。示例:my_set = {1, 2, 3}; my_set.discard(2); print(my_set)
将输出{1, 3}
。 -
pop()
:从集合中移除并返回一个任意元素。如果集合为空,则引发 KeyError。示例:my_set = {1, 2, 3}; x = my_set.pop(); print(my_set, x)
将输出{2, 3}, 1
。 -
clear()
:从集合中移除所有元素。示例:my_set = {1, 2, 3}; my_set.clear(); print(my_set)
将输出set()
。
接下来,我们将详细了解最常用的方法。
在 Python 中创建集合
在 Python 中,可以使用 set()
函数创建一个空集合。以下是一个示例
empty_set = set()
要使用值初始化一个集合,可以使用集合字面量。以下是一个集合示例
my_set = {1, 2, 3}
如上所述,可以通过使用集合字面量或 set()
函数在 Python 中创建一个集合。
如何在 Python 中向集合添加元素
在 Python 中,可以使用 add()
方法向集合中添加一个元素。以下是如何向集合中添加元素的示例
my_set = {1, 2, 3} # create a set with initial values
my_set.add(4) # add a new value to the set
print(my_set) # output: {1, 2, 3, 4}
注意:集合 对象 没有
append()
方法,因为它们是唯一元素的无序集合。
从集合中移除元素
在 Python 中,set
数据类型表示一个唯一元素的集合。remove
方法用于从集合中移除一个特定元素。
以下是如何从集合中移除元素的示例
# create a set
my_set = {1, 2, 3, 4, 5}
# remove an element from the set
my_set.remove(3)
print(my_set) # Output: {1, 2, 4, 5}
需要注意的是,如果要移除的元素不在集合中,则 remove
方法将引发 KeyError
异常。如果你想避免这种情况,可以使用 discard
方法,如果元素存在,它会从集合中移除该元素,如果元素不存在,则不执行任何操作。
以下是如何在 Python 中使用 discard 方法的示例
# create a set
my_set = {1, 2, 3, 4, 5}
# discard an element from the set
my_set.discard(3)
print(my_set) # Output: {1, 2, 4, 5}
# try to discard an element that is not in the set
my_set.discard(10)
print(my_set) # Output: {1, 2, 4, 5}
访问集合元素
集合是唯一元素的无序集合。因此,它们不支持像 列表 或 元组 那样按整数值进行索引。
如果你需要访问集合中的一个特定元素,可以使用 in
关键字来检查 python 集合是否包含一个元素,或者可以使用 for
循环来遍历集合中的元素。
以下是一些示例
# Creating a set
my_set = {1, 2, 3, 4, 5}
# Checking if an element exists in the set
if 3 in my_set:
print("3 is in the set")
# Iterating over the elements of the set
for element in my_set:
print(element)
输出
3 is in the set
1
2
3
4
5
Python 的集合长度
在 Python 中,可以使用内置的 len()
函数来获取集合中的元素数量。
例如,考虑以下集合
my_set = {1, 2, 3, 4, 5}
print(len(my_set)) # Output: 5
在 Python 中对集合排序
集合是唯一元素的无序集合,这意味着集合中的元素顺序不会被保留,因此最终输出不能是排序集合。
在 Python 中,可以使用内置的 sorted()
函数或 sort()
方法对集合进行排序。因此,使用此方法,我们将集合转换为列表。
使用 sorted()
函数
my_set = {4, 1, 3, 2, 5}
sorted_set = sorted(my_set)
print(sorted_set) # Output: [1, 2, 3, 4, 5]
当 sorted()
应用于集合时,它返回一个新的排序列表,其中包含原始集合的所有元素。
使用 sort()
方法
my_set = {4, 1, 3, 2, 5}
sorted_list = list(my_set)
sorted_list.sort()
sorted_set = set(sorted_list)
print(sorted_set) # Output: {1, 2, 3, 4, 5}
注意:
sort()
方法仅适用于列表,不能直接与集合一起使用。因此,你需要先将集合转换为列表,然后使用sort()
方法,再将其转换回集合。
在这两种情况下,结果集都将按升序排列。如果你想按降序排列集合,可以在 sorted()
函数中使用 reverse=True
参数或 sort()
方法的反向参数。
my_set = {4, 1, 3, 2, 5}
sorted_set_desc = sorted(my_set, reverse=True)
print(sorted_set_desc) # Output: [5, 4, 3, 2, 1]
my_set = {4, 1, 3, 2, 5}
sorted_list_desc = list(my_set)
sorted_list_desc.sort(reverse=True)
sorted_set_desc = set(sorted_list_desc)
print(sorted_set_desc) # Output: {5, 4, 3, 2, 1}
Python 中集合的 update 方法
集合的 update
方法允许你一次向集合中添加多个元素。
以下是使用 update 方法的语法
set.update(iterable)
iterable
参数可以是任何可迭代对象,例如列表、元组、集合,甚至字符串。update
方法将 iterable
中的所有元素添加到集合中,同时删除任何重复项。
以下是一个演示 update 方法的示例
>>> s1 = {1, 2, 3}
>>> s2 = {3, 4, 5}
>>> s1.update(s2)
>>> print(s1)
{1, 2, 3, 4, 5}
Python 中集合的交集
在 Python 中,可以使用 intersection()
方法找到集合的交集。
让我们看看如何在 Python 中获取两个集合的交集
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
set3 = {4, 5, 6, 7}
intersection_set = set1.intersection(set2, set3)
print(intersection_set) # Output: {4}
Python 中集合的差集
可以在 Python 中使用“ - ”运算符或 difference()
方法找到集合的差集。以下是一个示例
set1 = {1, 2, 3, 4, 5}
set2 = {3, 4, 5, 6, 7}
# Using the "-" operator
diff = set1 - set2
print(diff) # Output: {1, 2}
# Using the `difference()` method
diff = set1.difference(set2)
print(diff) # Output: {1, 2}
Python 中集合的并集
可以在 Python 中使用 union()
方法或管道 (|
) 运算符获取集合的并集。
以下是如何使用 union()
方法的示例
set1 = {1, 2, 3}
set2 = {2, 3, 4}
set3 = {3, 4, 5}
union_set = set1.union(set2, set3)
print(union_set) # Output: {1, 2, 3, 4, 5}
或者,我们可以使用管道 (|
) 运算符来实现相同的结果
set1 = {1, 2, 3}
set2 = {2, 3, 4}
set3 = {3, 4, 5}
union_set = set1 | set2 | set3
print(union_set) # Output: {1, 2, 3, 4, 5}
pop() 方法
Python 的集合数据类型中的 pop()
方法从集合中删除并返回一个任意元素。如果集合为空,则会引发 KeyError
。
以下是如何使用它的示例
my_set = {1, 2, 3, 4}
popped_element = my_set.pop()
print(popped_element) # output: an arbitrary element from the set, e.g. 1
print(my_set) # output: the remaining elements in the set, e.g. {2, 3, 4}