python 集合(set)

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

目录

创建

空集合

多类型创建集合

过滤重复元素

添加

添加简单元素

添加重复的元素

不能添加的类型

Set的元素不能是列表

Set的元素不能是字典

添加复杂元素

更新

删除

remove

discard

遍历

遍历方法1

遍历方法2

类型转换

集合转化为列表

集合转化为元组

元组转化为集合

交集

并集

总结


创建

创建set需要一个list、tuple、dict、str作为输入集合,

当然也可以使用set()创建一个空集合,之后再添加元素。

空集合

示例如下:

python 复制代码
s1 = set()
print(s1)
print(type(s1))

# 运算结果
# set()
# <class 'set'>

多类型创建集合

通过列表、元组、字典、字符串作为输入集合来创建集合或者转化为集合。

示例如下:

python 复制代码
s2 = set([1, 2, 3, 4])  # list
print(s2)
print(type(s2))

s3 = set((1, 2, 3, 4))  # tuple
print(s3)
print(type(s3))

s4 = set({1: 'a', 2: 'b', 3: 'c', 4: 'd'})  # dict
print(s4)
print(type(s4))

s5 = set('zhangsan')  # dict
print(s5)
print(type(s5))

# 运算结果
# {1, 2, 3, 4}
# <class 'set'>
# {1, 2, 3, 4}
# <class 'set'>
# {1, 2, 3, 4}
# <class 'set'>
# {'a', 'n', 'h', 'g', 's', 'z'}
# <class 'set'>

过滤重复元素

当创建集合时,输入集中有重复元素就会被自动过滤。

示例如下:

python 复制代码
s6 = set([1, 2, 3, 4, 5, 2, 4])
print(s6)
s7 = set((1, 3, 3, 4, 5, 2, 4))
print(s7)
s8 = set({0: 'zhangsan', 1: 'zhangsan'})
print(s8)

# 运算结果
# {1, 2, 3, 4, 5}
# {1, 2, 3, 4, 5}
# {0, 1}

添加

添加简单元素

示例如下:

python 复制代码
s9 = set([1, 2, 3])
s9.add(4)
s9.add(5)
print(s9)

# 运算结果
# {1, 2, 3, 4, 5}

添加重复的元素

可以添加重复的元素,但是没有效果。

示例如下:

python 复制代码
s9 = set([1, 2, 3])
s9.add(4)
s9.add(1)
s9.add(1)
print(s9)

# 运算结果
# {1, 2, 3, 4}

不能添加的类型

Set的元素不能是列表

因为列表类型是可变的。

示例如下:

python 复制代码
s9 = set([1, 2, 3])
s9.add(4)
s9.add([4, 5, 6])
print(s9)

抛出异常:

bash 复制代码
Traceback (most recent call last):
  File "E:\lianxipy\day3\集合.py", line 50, in <module>
    s9.add([4, 5, 6])
TypeError: unhashable type: 'list'
Set的元素不能是字典

因为字典是可变的。

示例如下:

python 复制代码
s9 = set([1, 2, 3])
s9.add(4)
# s9.add([4, 5, 6])
s9.add({'l': 'lisi', 'z': 'zhangsan'})
print(s9)

抛出异常:

bash 复制代码
Traceback (most recent call last):
  File "E:\lianxipy\day3\集合.py", line 51, in <module>
    s9.add({'l': 'lisi', 'z': 'zhangsan'})
TypeError: unhashable type: 'dict'

添加复杂元素

可通过add()添加元素、字符串的值。

示例如下:

python 复制代码
s9 = set([1, 2, 3])
s9.add(4)
s9.add((4, 5, 6, 7))
s9.add('zhangsan')
print(s9)

# 运算结果
# {1, 2, 3, 4, 'zhangsan', (4, 5, 6, 7)}

更新

更新整个列表、元素、字符串会被分解为单个进行更新。

示例如下:

python 复制代码
s10 = set([1, 2, 3, 4])
s10.update((5, 6, 7))
s10.update([8, 9, 7])
s10.update('zhangsan')
print(s10)

# 运算结果
# {1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'g', 'z', 'n', 'h', 's'}

删除

remove

示例如下:

python 复制代码
s10 = set([1, 2, 3, 4])
s10.update((5, 6, 7))
s10.update([8, 9, 7])
s10.update('zhangsan')

s10.remove('z')
print(s10)

# 运算结果
# {1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'n', 'g', 'h', 's'}

抛出异常:

bash 复制代码
Traceback (most recent call last):
  File "E:\lianxipy\day3\集合.py", line 63, in <module>
    s10.remove('z')
KeyError: 'z'

discard

使用discard删除元素,与remove使用方法相同,且元素不存在也不会抛出异常。

示例如下:

python 复制代码
s10 = set([1, 2, 3, 4])
s10.update((5, 6, 7))
s10.update([8, 9, 7])
s10.update('zhangsan')

s10.discard('z')
s10.discard('z')
print(s10)

# 运算结果
# {1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'n', 'g', 'h', 's'}

遍历

Set是没有索引的,无法通过索引获取元素。

遍历方法1

示例如下:

python 复制代码
s11 = set([1, 2, 3, 4, 5, 6])
for i in s11:
    print(i)

遍历方法2

示例如下:

python 复制代码
s11 = set([1, 2, 3, 4, 5, 6])
for index, item in enumerate(s11):
    print(index, item)

类型转换

集合转化为列表

示例如下:

python 复制代码
s12 = {1, 2, 3, 4}
print(type(s12))
l12 = list(s12)
print(type(l12))

# 运算结果
# <class 'set'>
# <class 'list'>

集合转化为元组

示例如下:

python 复制代码
s13 = {1, 2, 3, 4}
print(type(s13))
t13 = tuple(s13)
print(type(t13))
print(t13)

# 运算结果
# <class 'set'>
# <class 'tuple'>
# (1, 2, 3, 4)

元组转化为集合

示例如下:

python 复制代码
t1 = (1, 2, 3, 4, 5, 6,)
s14 = set(t1)
print(s14)

# 运算结果
# {1, 2, 3, 4, 5, 6}

交集

取两个集合的交集,有两种方式实现。

示例如下:

python 复制代码
s15 = {1, 2, 3, 4, 5, 6}
s16 = {2, 3, 5, 6, 8}
a1 = s15 & s16
print(a1)

a2 = set.intersection(s15, s16)
print(a2)

# 运算结果
# {2, 3, 5, 6}
# {2, 3, 5, 6}

并集

取两个集合的并集,也是有两个方式实现。

示例如下:

python 复制代码
s15 = {1, 2, 3, 4, 5, 6}
s16 = {2, 3, 5, 6, 8}
u1 = s15 | s16
print(u1)

u2 = set.union(s15, s16)
print(u2)

# 运算结果
# {1, 2, 3, 4, 5, 6, 8}
# {1, 2, 3, 4, 5, 6, 8}

总结

主要是对python set集合类型的增删改遍历及特性的整理。

相关推荐
GetcharZp20 分钟前
GitHub 2.4 万 Star!D2 正在重新定义程序员画图方式
后端
社交怪人22 分钟前
【算平均分】信息学奥赛一本通C语言解法(题号2071)
c语言·开发语言
郭涤生1 小时前
不同主机之间网络通信-以太网连接复习
开发语言·rk3588
山居秋暝LS1 小时前
【无标题】RTX00安装paddle OCR,win11不能装最新的,也不能用GPU
开发语言·r语言
卢锡荣1 小时前
单芯通吃,盲插标杆 —— 乐得瑞 LDR6020,Type‑C 全场景互联 “智慧芯”
c语言·开发语言·计算机外设
Xin_ye100861 小时前
C# 零基础到精通教程 - 第七章:面向对象编程(入门)——类与对象
开发语言·c#
彦为君2 小时前
Agent 安全:从权限提示到沙箱隔离
python·ai·ai编程
AI科技星2 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
审判长烧鸡2 小时前
【Go工具】go-playground是什么组织?官方的?
开发语言·安全·go
zhangxingchao2 小时前
多 Agent 架构到底怎么选?从 Claude Agent Teams、Cognition/Devin 到工程落地原则
前端·人工智能·后端