Set(集合),是一个无序不重复的元素集。
目录
创建
创建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集合类型的增删改遍历及特性的整理。