python3基础之集合set详解

  • Post category:Python

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)是不允许重复的。

集合操作

成员检查

可以使用 innot in 来判断一个元素是否存在于一个集合中:

s = set([1, 2, 3])
print(1 in s)  # output: True
print(4 not in s)  # output: True

交集、并集、差集与对称差集

假设我们有两个集合 s1s2,用来进行集合操作。

交集

交集是指同时存在于两个集合的元素。可以通过 &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}

先将两个列表转换成集合,然后使用 & 操作符找出共同的元素。