集合
集合是一种可迭代、无序的、不能包含重复元素的数据结构。不能通过索引访问。
与序列比较,序列中的元素是有序的、可重复的。而集合中的元素是无序的、不可重复的。序列强调的是有序,集合强调的是不重复。
集合分可变集合和不可变集合
1、创建可变集合
可变集合类型是set,创建可变集合可以使用set([iterable])函数,或者用大括号{}将元素括起来,元素之间用逗号隔开。注意:在创建空集合时要使用set()函数,若使用{}来创建会默认类型为字典。
上代码演示:
a = {}
b = set()
c = {1, 2, 3, 4, 5}
d = set(((1, 2), (2, 3), (3, 4), (4, 5), (5, 6)))
print(a, type(a))
print(b, type(b))
print(c, type(c))
print(d, type(d))
结果展示:
2、修改可变集合
可以向可变集合插入或删除元素。
- add(elem):添加元素,如果元素已经存在,则不能添加,不会抛出错误;
- remove(elem):删除元素,如果元素不存在,则抛出错误;
- discard(elem):删除元素,如果元素不存在,不会抛出错误;
- pop():删除返回集合中任意一个元素,返回值是删除的元素;
- clear():清除集合。
上代码演示:
a = set(((1, 2), (2, 3), (3, 4), (4, 5), (5, 6)))
print('原集合', a)
a.add((6, 7))
a.add((5, 6))
# 注意原集合中以存在元素(5, 6)
print('add():', a)
a.remove((1, 2))
print('remove():', a)
a.discard((1, 2))
print('discard():', a)
b = a.pop()
print('pop():', b, '\na:', a)
a.clear()
print('clear():', a, type(a))
结果展示:
3、遍历集合
集合是无序的,没有索引,不能通过下标访问单个元素。但可以遍历集合,访问集合中的每一个元素。
一般用for循环遍历集合。
上代码演示:
a = {(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)}
for i, item in enumerate(a):
print('{0} — {1}'.format(i, item))
# enumerate()之前在元组有讲过,只不过此处的i不是索引,是遍历的次数
结果展示:
从结果可以看出集合的无序性,遍历输出的结果并非集合中元素的排序,所以集合是无序的。
4、不可变集合
不可变集合类型是frozenset,创建时使用frozenset([iterable])函数,不能使用大括号{}创建。
不可变集合是不能被修改的,在尝试修改时会发生错误。
上代码演示:
a = frozenset((1, 2, 3, 4, 5))
print('a:', a, type(a))
a.clear()
结果展示:
注:从结果可以看出创建成功了,但想进行修改就会弹出错误。
5、集合推导式
与列表推导式相似,区别只是输出的结果是集合。
直接上代码:
a = [1, 2, 3, 4, 5, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2]
b = [x ** 2 for x in a]
c = {x ** 2 for x in a}
print('a列表元素平方的列表:', b)
print('a列表元素平方的集合:', c)
结果展示:
注:从结果可以看出,集合推导式输出结果会过滤掉重复元素。
欢迎参考学习,有错请指证,喜欢的请关注本人博客,不定期更新学习心得,学习笔记。
版权声明:本文为weixin_47030183原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。