Python语言提供了集合类型set,set里存储的元素无序而不重复,这是它区别于list和tuple的地方。
1. 创建
有两种创建方式:{a, b, c}和set()函数。
注意: 空集合set只能通过set()函数来创建,不能通过{}来创建,因为Python把{}当成空字典dictionary了。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 练习setdef create_set():s = set()print(s)s1 = {'aaa', 'bbb', 'cccc', 'cccc'}print(s1)s2 = set('abcabc')print(s2)def main():create_set()if __name__ == '__main__':main()
执行结果:
set()
{'cccc', 'aaa', 'bbb'}
{'c', 'b', 'a'}
再执行一次:
set()
{'bbb', 'cccc', 'aaa'}
{'a', 'b', 'c'}
从两次打印结果来看,我们很容易就看到了元素的无序性和不重复性。
2. 操作
直接写一段测试代码看它有哪些操作。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 练习setdef create_set():s = set()print(s)s1 = {'aaa', 'bbb', 'cccc', 'cccc'}print(s1)s2 = set('abcabc')print(s2)s3 = {x for x in 'abcqwe' if x not in 'abc'}print(s3)def operate_set():s1 = set('abcdefgabc')print('s1:', s1)print('s1 length: ', len(s1)) # 求长度if 'a' in s1:print('a is in ', s1)if 'x' not in s1:print('x is not in ', s1)s2 = set('abcxyz')print(s2)print(s1 - s2) # 在s1内,但不在s2内print(s1 | s2) # s1和s2合集print(s1 & s2) # s1和s2交集print(s1 ^ s2) # 不在两者里都出现的s3 = {1, 2, 3, 4, 5}s3.add(6) # 添加一个元素print('s3:', s3)s3.remove(2) # 删除指定的元素, 如果不存在会抛出异常print('s3:', s3)s3.discard(9) # 删除指定的元素, 如果不存在不会抛出异常print('s3:', s3)s3.pop() # 随机删除一个元素并返回这个元素值print('s3:', s3)s3.clear() # 清空整个setprint('s3:', s3)def main():create_set()print('-------------------------------------------------')operate_set()if __name__ == '__main__':main()
3. 结束语
集合set没有列表list和字典dictionary使用的频繁,它适合使用在集合里元素不重复的情况下,每个数据结构有它最合适的使用场景,这促使我们在实际编程过程中根据实际问题来寻找恰当的数据结构。