python---集合
1. 什么是集合{}?
集合(set)是一个无序的不重复元素序列。它是可迭代的,没有重复元素(每个元素都是唯一的)的
○ 集合中的元素不能重复。
○ 集合中的元素是不可变的(不能修改),但整个集合是可变的。
○ 没有索引附加到python集中的任何元素。因此,它们不支持任何索引或切片操作。
2. 创建集合:不能直接用{}创建空集合,{}表示的是空字典
set_val = {1, 2, 3, 4}
empty_set = set()
str_val = 'hello Python' set_val = set(str_val) print(set_val) # 运行结果: {' ', 'y', 't', 'e', 'l', 'n', 'h', 'o', 'P'} 无序的,去重的
set_val = {1, 'hello', (1, 2), [1, 2, 3]}
print(set_val)
# 运行结果: TypeError: unhashable type: 'list', 集合里边的元素应该是不可变数据
3. 集合的常见操作
增 add()
set_val = {1, 'hello', (1, 2)}
set_val.add('python')
print(set_val)
改 update()
set_val = {1, 'hello', (1, 2)}
new_set = {'python', 'C++'}
set_val.update(new_set)
print(set_val)
# 运行结果: {1, (1, 2), 'hello', 'python', 'C++'} 无序的
删
del 删除整个集合
set_val = {1, 'hello', (1, 2)}
new_set = {'python', 'C++'}
set.update(new_set)
del new_set
print(set_val)
# 运行结果: {1, (1, 2), 'hello'} 无序的
pop() 随机删除元素
set_val = {1, 'hello', (1, 2)}
set_val.pop()
print(set_val)
remove()移除指定元素,当元素不存在时提示KeyError
set_val = {1, 'hello', (1, 2)}
set_val.remove(1)
print(set_val)
# 运行结果: {1(1, 2), 'hello'} 无序的
set_val = {1, 'hello', (1, 2)}
set_val.remove(2)
print(set_val)
# 运行结果:KeyError: 2
discard() 移除指定元素,当元素不存在时,不报错
set_val = {1, 'hello', (1, 2)}
set_val.discard((1, 2))
print(set_val)
# 运行结果: {1, 'hello'} 无序的
set_val = {1, 'hello', (1, 2)}
set_val.discard(2)
print(set_val)
# 运行结果:{'hello', 1, (1, 2)} 无序的
查 in
set_val = {1, 'hello', (1, 2)}
if 1 in set_val:
print('该元素在集合里')
else:
print('该元素不在集合里')
# 运行结果: 该元素在集合里
集合的运算
交集---intersection()函数:移除两个集合都不存在的元素,方法返回一个存在相同元素的新集合
set_a = {1, 'a', (1, 2)}
set_b = {1, 'b', (1, 2, 3)}
set_val = set_a.intersection(set_b)
print(set_val)
print(set_a)
print(set_b)
"""
运行结果:生成一个新的集合, set_a和set_b没变化
{1}---set_val
{1, (1, 2), 'a'}---set_a
{1, 'b', (1, 2, 3)}---set_b
"""
intersection_update()函数:移除两个集合都不存在的元素
set_a = {1, 'a', (1, 2)}
set_b = {1, 'b', (1, 2, 3)}
set_val = set_a.intersection_update(set_b)
print(set_val)
print(set_a)
print(set_b)
"""
运行结果:
None
{1}---set_a
{1, 'b', (1, 2, 3)}---set_b
"""
并集---union(): 方法返回两个集合的并集,即包含了所有集合的元素,重复的元素只出现一次
set_a = {1, 'a', (1, 2)}
set_b = {1, 'b', (1, 2, 3)}
set_val = set_a.union(set_b)
print(set_val)
print(set_a)
print(set_b)
"""
运行结果:生成一个新的集合, set_a和set_b没变化
{1, (1, 2), 'a', (1, 2, 3), 'b'}---set_val
{1, (1, 2), 'a'}---set_a
{1, 'b', (1, 2, 3)}---set_b
"""
差集---different(): 移除两个集合都存在的元素,方法返回一个移除都存在元素后的集合
set_a = {1, 'a', (1, 2)}
set_b = {1, 'b', (1, 2, 3)}
set_val = set_a.difference(set_b)
print(set_val)
print(set_a)
print(set_b)
"""
运行结果:set_a移除都存在的元素1,生成一个新的集合, set_a和set_b没变化
{(1, 2), 'a'}---set_value
{1, 'a', (1, 2)}---set_a
{1, (1, 2, 3), 'b'}---set_b
"""
difference_update():移除两个集合都存在的元素,没有返回值
set_a = {1, 'a', (1, 2)}
set_b = {1, 'b', (1, 2, 3)}
set_val = set_a.difference_update(set_b)
print(set_val)
print(set_a)
print(set_b)
"""
运行结果:set_a移除都存在的元素1, set_b没变化
None
{(1, 2), 'a'}---set_a
{1, (1, 2, 3), 'b'}---set_b
"""