Python中的集合(set) 概念,与数学课程上所学的集合概念相同。 集合里不会存在重复数据,因此可以用来对数据进行去重处理, 两个集合之间可以进行交集运算,并集运算,差集运算。
集合中的元素有3个特性:
- 确定性:给定一个集合,任何对象是不是这个集合的元素是确定的了。
- 互异性:集合中的元素一定是不同的。
- 无序性:集合中的元素没有固定的顺序。
定义集合
language_set = {'java', 'c', 'python'}
定义空集合
name_set = set()
定义时有重复元素
fruits_set = set(['apple', 'orange', 'banana', 'apple'])
print(language_set)
{'python', 'java', 'c'}
print(name_set)
set()
print(fruits_set)
{'orange', 'apple', 'banana'}
s.add(element)
add
方法将 element
添加到集合 s
中,如果集合s已经包含了 element
,则不进行任何操作,
集合中的元素具有唯一性,绝不会出现重复的情况。
定义集合
language_set = {'java', 'c', 'python'}
language_set.add('c++')
print(language_set)
{'c++', 'python', 'java', 'c'}
update
方法同样可以向集合中添加新的元素,且可以一次性添加多个,
update
方法的本质是先计算两个集合的并集,在用并集更新原集合。
update
语法如下:
s.update(seq)
seq
参数可以是列表,元素,集合。
定义集合
language_set = {'java', 'c', 'python'}
传入列表
language_set.update(['node.js', 'php'])
print(language_set)
{'python', 'node.js', 'php', 'c', 'java'}
传入元组
language_set.update(('javascript', 'c#'))
print(language_set)
{'javascript', 'python', 'node.js', 'php', 'c', 'c#', 'java'}
language_set.update({'vb', 'go'})
print(language_set)
{'javascript', 'python', 'node.js', 'php', 'go', 'c', 'c#', 'java', 'vb'}
s.remove(element)
remove
方法将 element
从集合中删除,需要注意的是如果 element
不在集合中, remove
方法将会发生错误。
language_set = {'java', 'c', 'python'}
language_set.remove('c')
# language_set.remove('c++') #此代码会报错
remove
是一种不安全的删除集合元素的方法,想要安全的删除集合元素,
可以使用 discard
方法,当被删除的元素不存在时 discard
不会发生错误。
discard
语法如下:
s.discard(element)
示例代码:
language_set = {'java', 'c', 'python'}
language_set.discard('c')
language_set.discard('c++')
language_set
{'java', 'python'}
remove
和 discard
方法都没有返回值,它们原地修改集合。
pop
方法比较特殊,它的语法定义如下:
s.pop()
pop
方法没有参数,它随机的删除一个元素并返回该元素,当集合为空时, pop
方法会引发 KeyError
异常。
language_set = {'java', 'c', 'python'}
language_set.pop()
'python'
language_set.pop()
'java'
language_set.pop()
'c'
# language_set.pop() #此代码会报错
language_set = {'java', 'c', 'python'}
len(language_set)
3
language_set = {'java', 'c', 'python'}
for language in language_set:
print(language)
python java c
s.clear()
clear
方法会将集合中所有元素都删除。
language_set = {'java', 'c', 'python'}
language_set.clear()
language_set
set()
language_set = {'java', 'c', 'python'}
'java' in language_set
True
'c++' in language_set
False
s.intersection(set1, set2 ... etc)
intersection
方法可以传入多个集合,最少传入一个集合,因此 set1
是必须要传入的,
返回的新集合中的元素既在s中,也在 set1
, set2
... 中。
language_set_1 = {'java', 'c', 'python'}
language_set_2 = {'java', 'php'}
intersection_set = language_set_1.intersection(language_set_2)
intersection_set
{'java'}
intersection_set = language_set_2.intersection(language_set_1)
intersection_set
{'java'}
s.union(set1, set2...)
union
方法允许传入多个集合, set1
必传,因为至少需要传入一个集合参与计算。
language_set_1 = {'java', 'c', 'python'}
language_set_2 = {'java', 'php'}
union_set = language_set_1.union(language_set_2)
union_set
{'c', 'java', 'php', 'python'}
s1.difference(s2)
实例代码:
language_set_1 = {'java', 'c', 'python'}
language_set_2 = {'java', 'php'}
diff_set = language_set_1.difference(language_set_2)
diff_set
{'c', 'python'}
diff_set = language_set_2.difference(language_set_1)
diff_set
{'php'}
集合常用方法
方法 | 描述 |
---|---|
add() |
为集合添加新元素 |
clear() |
删除集合中的所有元素 |
copy() |
拷贝一个集合 |
difference() |
返回多个集合的差集 |
difference_update() |
从一个集合中删除另一个集合的所有元素,本质上就是删除两个集合的交集部分 |
discard() |
删除集合中指定的元素,元素不存在时不会引发异常 |
intersection() |
返回集合的交集 |
intersection_update() |
计算多个集合的交集然后用交集更新替换原集合 |
isdisjoint() |
判断交集是否为空 |
issubset() |
判断集合是否是另一集合的子集 |
issuperset() |
判断集合是否包含另外一个集合 |
pop() |
随机删除集合中的元素 |
remove() |
移除集合中指定元素,元素不存在时会引发异常 |
symmetric_difference() |
返回两个集合中不重复的元素集合。 |
symmetric_difference_update() |
python集合的 symmetric_difference_update 方法与 symmetric_difference 类似,都是计算两个集合不重复的部分,区别是 symmetric_difference 方法返回不重复元素组成的集合,而 symmetric_difference_update 用这个新集合更新原集合 |
union() |
返回两个集合的并集 |
update() |
计算原集合与另一个集合的并集,并用计算得出的并集更新原集合 |