python3中有一个不同于列表、元组、字符串的一个数据类型,叫集合。
集合表现形式和字典差不多,都是用{}括起来,两者都是无序的数据类型,不同的是,字典是{'1':'2','3':'4'}这种类型的,而集合则是{'1','2','3','4'}这种类型的。
集合一个有别于列表、元组、字符串的特点是无序,类似于列表、字符这种的数据都有序列,比如第一位是多少,最后一位是多少,集合是没有的,即使使用[1]或者[:5]这种的方式也无法读取。
>>> {'1','2','3'}[1]
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
{'1','2','3'}[1]
TypeError: 'set' object does not support indexing
>>> {'1','2','3'}[1:]
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
{'1','2','3'}[1:]
TypeError: 'set' object is not subscriptable
集合的另一个特性是不重复。类似于列表、字符这种的数据,可以有很多重复的数据,比如可以有十个h或者十个1,输出后还是有有十个h或者十个1。但是集合会自动合并重复数据。
>>> {'1','2','3','1','2','3','1','2','3'}
{'3', '1', '2'}
但是集合可以正常判定有多少字符,某个字符是否包含或不包含在集合内,也可以判定谁是最大的,谁是最小的。
>>> max({'1','2','3'})
'3'
>>> min({'1','2','3'})
'1'
>>> 1 not in ({'1','2','3'})
True
>>> 1 in({'1','2','3'})
False
集合虽然无序,但是可以求集合间的差集。
>>> {1,2,3,4,5,6,7,8,9} - {7,8}
{1, 2, 3, 4, 5, 6, 9}
也可以求集合间的交集
>>> {1,2,3,4,5,6,7,8,9} & {7,8}
{8, 7}
还可以求集合间的合集/并集
>>> {1,2,3,4,5,6,7,8,9} | {7,8}
{1, 2, 3, 4, 5, 6, 7, 8, 9}
最后,定义空的集合并非是用{}即可,而是set()
>>> type(set())
<class 'set'>