L'E

言必虑其所终!

导航

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内部“不会有重复元素”。

posted on 2016-09-07 21:21  L'E  阅读(76)  评论(0编辑  收藏  举报