Python3基础之集合(set)详解
在Python中,集合(set)是一种无序且不重复的数据结构。它由一对花括号 {}
来表示,用逗号分隔不同元素。我们可以使用集合来进行一些常见的集合操作,例如成员检查,交集、联合等。
创建集合
可以通过以下两种方式来创建一个空的集合:
# 创建一个空集合
s = set()
print(s) # output: set()
# 或者使用花括号 {} 来创建
s = {}
print(type(s)) # output: <class 'dict'>
需要注意的是,如果要使用花括号来创建一个空集合,必须要添加一个元素,不然会变成一个空字典(dict)。
除此之外,我们还可以使用 set()
函数来创建一个集合,并且可以在函数内传入一个可迭代的对象,例如列表、元组、字符串等:
# 创建一个包含多个元素的集合
s1 = set([1, 2, 3])
print(s1) # output: {1, 2, 3}
s2 = set((1, 2, 2, 3))
print(s2) # output: {1, 2, 3}
s3 = set('hello')
print(s3) # output: {'h', 'o', 'l', 'e'}
需要注意的是,虽然在创建 s2
的时候传入了 (1, 2, 2, 3)
,但最终结果只包含了一次重复的元素。这是因为集合(set)是不允许重复的。
集合操作
成员检查
可以使用 in
和 not in
来判断一个元素是否存在于一个集合中:
s = set([1, 2, 3])
print(1 in s) # output: True
print(4 not in s) # output: True
交集、并集、差集与对称差集
假设我们有两个集合 s1
和 s2
,用来进行集合操作。
交集
交集是指同时存在于两个集合的元素。可以通过 &
或 intersection()
函数来获取交集:
s1 = set([1, 2, 3])
s2 = set([2, 3, 4])
print(s1 & s2) # output: {2, 3}
print(s1.intersection(s2)) # output: {2, 3}
并集
并集是指两个集合中所有元素的集合。可以通过 |
或 union()
函数来获取并集:
s1 = set([1, 2, 3])
s2 = set([2, 3, 4])
print(s1 | s2) # output: {1, 2, 3, 4}
print(s1.union(s2)) # output: {1, 2, 3, 4}
差集
差集是指存在于第一个集合中,但不存在于第二个集合中的元素。可以通过 -
或 difference()
函数来获取差集:
s1 = set([1, 2, 3])
s2 = set([2, 3, 4])
print(s1 - s2) # output: {1}
print(s1.difference(s2)) # output: {1}
对称差集
对称差集是指存在于一个集合中,但不同时存在于两个集合中的元素。可以通过 ^
或 symmetric_difference()
函数来获取对称差集:
s1 = set([1, 2, 3])
s2 = set([2, 3, 4])
print(s1 ^ s2) # output: {1, 4}
print(s1.symmetric_difference(s2)) # output: {1, 4}
需要注意的是,在进行集合操作时,返回结果都是一个新的集合。原有的集合并不会被修改。
示例说明
示例一:统计句子中不同的单词数量
s = 'This is a sentence. This is another sentence.'
words = s.split(' ')
unique_words = set(words)
print(len(unique_words)) # output: 6
首先使用 split()
函数将句子分割成单词,然后将单词列表转换成集合,再使用 len()
函数来计算集合中不同元素的数量。
示例二:找出两个列表中的共同元素
list1 = [1, 3, 5, 7]
list2 = [2, 3, 5, 8]
common_elements = set(list1) & set(list2)
print(common_elements) # output: {3, 5}
先将两个列表转换成集合,然后使用 &
操作符找出共同的元素。