Set(集合),是一个无序不重复的元素集。
目录
创建set需要一个list、tuple、dict、str作为输入集合,
当然也可以使用set()创建一个空集合,之后再添加元素。
示例如下:
- s1 = set()
- print(s1)
- print(type(s1))
-
- # 运算结果
- # set()
- #
通过列表、元组、字典、字符串作为输入集合来创建集合或者转化为集合。
示例如下:
- 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}
- #
- # {1, 2, 3, 4}
- #
- # {1, 2, 3, 4}
- #
- # {'a', 'n', 'h', 'g', 's', 'z'}
- #
当创建集合时,输入集中有重复元素就会被自动过滤。
示例如下:
- 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}
示例如下:
- s9 = set([1, 2, 3])
- s9.add(4)
- s9.add(5)
- print(s9)
-
- # 运算结果
- # {1, 2, 3, 4, 5}
可以添加重复的元素,但是没有效果。
示例如下:
- s9 = set([1, 2, 3])
- s9.add(4)
- s9.add(1)
- s9.add(1)
- print(s9)
-
- # 运算结果
- # {1, 2, 3, 4}
因为列表类型是可变的。
示例如下:
- s9 = set([1, 2, 3])
- s9.add(4)
- s9.add([4, 5, 6])
- print(s9)
抛出异常:
- Traceback (most recent call last):
- File "E:\lianxipy\day3\集合.py", line 50, in
- s9.add([4, 5, 6])
- TypeError: unhashable type: 'list'
因为字典是可变的。
示例如下:
- s9 = set([1, 2, 3])
- s9.add(4)
- # s9.add([4, 5, 6])
- s9.add({'l': 'lisi', 'z': 'zhangsan'})
- print(s9)
抛出异常:
- Traceback (most recent call last):
- File "E:\lianxipy\day3\集合.py", line 51, in
- s9.add({'l': 'lisi', 'z': 'zhangsan'})
- TypeError: unhashable type: 'dict'
可通过add()添加元素、字符串的值。
示例如下:
- 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)}
更新整个列表、元素、字符串会被分解为单个进行更新。
示例如下:
- 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'}
示例如下:
- 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'}
抛出异常:
- Traceback (most recent call last):
- File "E:\lianxipy\day3\集合.py", line 63, in
- s10.remove('z')
- KeyError: 'z'
使用discard删除元素,与remove使用方法相同,且元素不存在也不会抛出异常。
示例如下:
- 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是没有索引的,无法通过索引获取元素。
示例如下:
- s11 = set([1, 2, 3, 4, 5, 6])
- for i in s11:
- print(i)
示例如下:
- s11 = set([1, 2, 3, 4, 5, 6])
- for index, item in enumerate(s11):
- print(index, item)
示例如下:
- s12 = {1, 2, 3, 4}
- print(type(s12))
- l12 = list(s12)
- print(type(l12))
-
- # 运算结果
- #
- #
示例如下:
- s13 = {1, 2, 3, 4}
- print(type(s13))
- t13 = tuple(s13)
- print(type(t13))
- print(t13)
-
- # 运算结果
- #
- #
- # (1, 2, 3, 4)
示例如下:
- t1 = (1, 2, 3, 4, 5, 6,)
- s14 = set(t1)
- print(s14)
-
- # 运算结果
- # {1, 2, 3, 4, 5, 6}
取两个集合的交集,有两种方式实现。
示例如下:
- 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}
取两个集合的并集,也是有两个方式实现。
示例如下:
- 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集合类型的增删改遍历及特性的整理。