python - 集合

117 阅读3分钟

集合(set)是一个无序的不重复元素序列。

使用 set() 函数创建集合

注意:

  • 创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
  • 创建格式:
  • 同一集合中,只能存储不可变的数据类型,包括整形、浮点型、字符串、元组,无法存储列表、字典、集合这些可变的数据类型,否则 Python 解释器会抛出 TypeError 错误

集合的创建

需要注意的是,数据必须保证是唯一的,因为集合对于每种数据元素,只会保留一份。

使用 {} 创建

会自动去除 重复的子项

data_set = {1, 2, 3, 3, 1, 'set1', 'set2', 'set3'}

print(data_set, type(data_set))

# 输出
# {1, 2, 3, 'set1', 'set3', 'set2'} <class 'set'>

set()函数创建集合

set() 函数为 Python 的内置函数,其功能是将字符串、列表、元组、range 对象等可迭代对象转换成集合。

列表转换为 集合

data = [1, 2, 3, 4, 5]
data_set_2 = set(data)

print(data_set_2, type(data_set_2))

# 输出
# {1, 2, 3, 4, 5}  <class 'set'>

元组 转换为 集合

tup = (7, 8, 9)
data_set_3 = set(tup)

print(data_set_3, type(data_set_3))
# 输出
# {8, 9, 7} <class 'set'>

字符 转换为 集合

str = 'python'
data_set_4 = set(str)

print(data_set_4, type(data_set_4))

# 输出
# {'h', 'n', 'o', 't', 'y', 'p'} <class 'set'>

range

data_set_range = set(range(10))
print(data_set_range, type(data_set_range))

# 输出
# {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} <class 'set'>

集合的基本操作

**s.add(item) **

将 item 添加到 s 集合中

data_set_5 = {1, 2, 3, 4}
data_set_5.add(5)

print(data_set_5)

# 输出
# {1, 2, 3, 4, 5}

update()

参数可以是列表,元组,字典等

data_set_6 = {'python'}

# 单个添加
data_set_6.update('c')
print(data_set_6)

# 输出
# {'python', 'c'}

# 列表
data_set_6.update(['java', 'c++'])
print(data_set_6)

# 输出
# {'python', 'c', 'c++', 'java'}

data_set_6.update((1, 2, 3, 4, 5))
print(data_set_6)

# 输出
# {1, 2, 3, 4, 5, 'c++', 'c', 'java', 'python'}

remove(item)

将 item 从集合中 删除

data_set_7 = {'python', 'c++', 'c'}
data_set_7.remove('c')

print(data_set_7)
# 输出
# {'python', 'c++'}

discard(item) 与 remove(item) 区别在于 discard(item) 如果元素不存在,不会发生错误

data_set_8 = {'python', 'c++', 'c'}
data_set_8.discard('c++')

print(data_set_8)

# 输出
# {'python', 'c'}

pop() 随机删除集合中的一个元素

data_set_9 = {'python', 'c++', 'c', 'javascript'}
data_set_9.pop()

print(data_set_9)

# 输出
# {'javascript', 'python', 'c++'}

len()

计算集合元素个数。

data_set_10 = {'python', 'c++', 'c', 'javascript', 'c#'}
print(len(data_set_10))

# 输出
# 5

clear()

清空集合

data_set_11 = {'python', 'c++', 'c', 'javascript', 'c#'}
data_set_11.clear()

print(data_set_11)

# 输出
# set()

in

判断元素 是否存在 集合中 in,

存在返回 True,不存在返回 False。

data_set_12 = {'python', 'c++', 'c', 'javascript', 'c#'}
print(1 in data_set_12)
# False
print('c' in data_set_12)
# True

intersection(set1, set2 ...)

set1 -- 必需,要查找相同元素的集合

set2 -- 可选,其他要查找相同元素的集合,可以多个,多个使用逗号 , 隔开

会返回一个新集合

set1 = {'c', 'c++', 'js'}
set2 = {'java', 'c#', 'c'}
set3 = {'php', 'c', 'python'}

res = set1.intersection(set2)
print(res)

# 返回一个新集合,该集合的元素既包含在集合 set1 又包含在集合 set2 中:
# {'c'}

# 计算多个集合的交集:
res_2 = set1.intersection(set2, set3)
print(res_2)
# {'c'}

union()

union(set1, set2...)

set1 -- 必需,合并的目标集合

set2 -- 可选,其他要合并的集合,可以多个,多个使用逗号 , 隔开。

方法返回两个集合的并集,即包含了所有集合的元素,重复的元素只会出现一次。

res = set1.union(set2)
print(res)

# {'c', 'java', 'c#', 'js', 'c++'}

# 合并多个集合:
res_2 = set1.union(set2, set3)

print(res_2)
# {'c#', 'c++', 'java', 'js', 'php', 'c', 'python'}