Python学习笔记(九)集合set
在Python中,集合是一些列不重复的元素。集合类似于字典,但是只包含键,而没有相关联的值。
集合分两类:可变集合和不可变集合。对于可变集合,你可以添加和删除元素,而不可变集合一旦创建就不能修改。
集合最常见的用途可能是用于删除序列中重复的元素
1 >>> lis = [1, 2, 1, 2, 3, 3]
2 >>> s = set(lis)
3 >>> print(s)
4 {1, 2, 3}
与字典一样,集合的元素排列顺序也是不确定的。
通过add(key)
方法可以添加元素到set中,可以重复添加,但不会有效果:
1 >>> s.add(4)
2 >>> s
3 {1, 2, 3, 4}
4 >>> s.add(4)
5 >>> s
6 {1, 2, 3, 4}
通过remove(key)
方法可以删除元素:
1 >>> s.remove(2)
2 >>> s
3 {1, 3, 4}
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:
1 >>> s1 = set([1,2,3])
2 >>> s2 = set([2,3,4])
3 >>> s1 & s2
4 {2, 3}
5 >>> s1 | s2
6 {1, 2, 3, 4}
集合相关操作
1.创建集合
由于集合没有自己的语法格式,只能通过集合的工厂方法set()和frozenset()创建
1 >>> s = set('python')
2 >>> s
3 {'p', 'h', 'o', 't', 'n', 'y'}
4 >>> w = frozenset('hello')
5 >>> w
6 frozenset({'o', 'e', 'l', 'h'})
7 >>> type(s),type(w)
8 (<class 'set'>, <class 'frozenset'>)
9 >>> len(s),len(w)
10 (6, 4)
11 >>> s == w
12 False
13 >>> s = w
14 >>> s == w
15 True
2.访问集合
由于集合本身是无序的,所以不能为集合创建索引或切片操作,只能循环遍历或使用in、not in来访问或判断集合元素。
1 >>> 'p' in s
2 False
3 >>> 'o' in s
4 True
5 >>> for i in s:
6 ... print(i)
7 ...
8 o
9 e
10 l
11 h
3.更新集合
可使用以下内建方法来更新:
s.add()
s.update()
s.remove()
注意只有可变集合才能更新:
1 >>> s.add(0)
2 Traceback (most recent call last):
3 File "<stdin>", line 1, in <module>
4 AttributeError: 'frozenset' object has no attribute 'add'
5 >>> s1 = set(s)
6 >>> s1
7 {'o', 'e', 'l', 'h'}
8 >>> type(s)
9 <class 'frozenset'>
10 >>> type(s1)
11 <class 'set'>
12 >>> s1.add(0)
13 >>> s1
14 {'o', 0, 'e', 'l', 'h'}
15 >>> s1.update('GGMM')
16 >>> s1
17 {0, 'h', 'o', 'l', 'M', 'G', 'e'}
18 >>> s1.remove('o')
19 >>> s1
20 {0, 'h', 'l', 'M', 'G', 'e'}
del:删除集合本身
集合、列表、元组、字符串之间转换
1 >>> list(s1)
2 [0, 'h', 'l', 'M', 'G', 'e']
3 >>> str(s1)
4 "{0, 'h', 'l', 'M', 'G', 'e'}"
5 >>> tuple(s1)
6 (0, 'h', 'l', 'M', 'G', 'e')
集合的内建函数、内建方法
1、len():返回集合元素个数
2、set()、frozenset()工厂函数
3、所有集合方法:
4、仅适合可变集合
set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。
o(=•ェ•=)m纸上得来终觉浅,绝知此事要躬行o(=•ェ•=)m