1.set是一个无序不重复的序列
2.可以用 { } 或者 set( ) 函数创建集合
3.集合存放不可变类型(字符串、数字、元组)
注意:创建一个空集合必须用 set( ) 而不是 { } ,因为 { } 是用来创建一个空字典
Python 序列(Sequence): 是指按特定顺序依次排列的一组数据,它们可以占用一块连续的内存,也可以分散到多块内存中。Python 中的序列类型包括列表(list)、元组(tuple)、字典(dict)和集合(set)。
数据是有序:列表(list)和元组(tuple)比较相似,它们都按顺序保存元素,所有的元素占用一块连续的内存,每个元素都有自己的索引,因此列表和元组的元素都可以通过索引(index)来访问。它们的区别在于:列表是可以修改的,而元组是不可修改的。
数据是无序:字典(dict)和集合(set)存储的数据都是无序的,每份元素占用不同的内存,其中字典元素以 【key-value 】的形式保存。
Python 中的集合,和数学中的集合概念一样,用来保存不重复的元素,即集合中的元素都是唯一的,互不相同。
从形式上看,和字典类似,Python 集合会将所有元素放在一对大括号 {} 中,相邻元素之间用“,”分隔,如下所示:
{element1,element2,...,elementn}
其中,elementn 表示集合中的元素,个数没有限制。
从内容上看,同一集合中
,只能存储不可变的数据类型
,包括整形、浮点型、字符串、元组, 无法存储列表、字典、集合这些可变的数据类型,否则 Python 解释器会抛出 TypeError 错误。比如说:
>>> {{'a':1}}
Traceback (most recent call last):
File "", line 1, in
{{'a':1}}
TypeError: unhashable type: 'dict'
>>> {[1,2,3]}
Traceback (most recent call last):
File "", line 1, in
{[1,2,3]}
TypeError: unhashable type: 'list'
>>> {{1,2,3}}
Traceback (most recent call last):
File "", line 1, in
{{1,2,3}}
TypeError: unhashable type: 'set'
并且需要注意的是,数据必须保证是唯一的
,因为集合对于每种数据元素,只会保留一份。 例如:
>>> {1,2,1,(1,2,3),'c','c'}
{1, 2, 'c', (1, 2, 3)}
由于 Python 中的 set 集合是无序的,所以每次输出时元素的排序顺序可能都不相同。
其实,Python 中有两种集合类型,一种是 set 类型的集合,另一种是 frozenset 类型的集合,它们唯一的区别是,set 类型集合可以做添加、删除元素的操作,而 forzenset 类型集合不行。
准确来说dict是set的一种特殊情况,set可以存储整型、浮点型、字符串、数组、列表、元组等常见的数据类型,而dict存储时存储的是以键值对为基础的数据,像上面set已有例子就不仔细介绍了,下面介绍下dict类型:
dict_data = {'name': 'mike', 'dob': '1999-01-01', 'gender': 'male'}
print(dict_data)
>>>
{'name': 'mike', 'dob': '1999-01-01', 'gender': 'male'}
进程已结束,退出代码为 0
冒号前为键,冒号后为键值,两者一一对应,其也具有set的相关性质,键必须为唯一值。
当访问信息时,利用字典在运行时间上在数据比较大时会快很多,因为set结构访问时只能通过遍历去访问,而dict数据通过键值对对应,访问起来就比较迅速,下面介绍下两者的工作原理:
字典和集合的内部结构都是一张哈希表
:对于字典而言,这张表存储了哈希值(hash)、键和值这 3 个元素,而对集合来说,哈希表内只存储单一元素。
| 哈希值 (hash) 键 (key) 值 (value)
. | ...
0 | hash0 key0 value0
. | ...
1 | hash1 key1 value1
. | ...
2 | hash2 key2 value2
. | ...
随着哈希表的扩张,它会变得越来越稀疏,显然,这样非常浪费存储空间。为了提高存储空间的利用率,现在的哈希表
除了字典本身的结构,会把索引和哈希值、键、值单独分开
,也就是采用如下这种结构:
Indices
----------------------------------------------------
None | index | None | None | index | None | index ...
----------------------------------------------------
Entries
--------------------
hash0 key0 value0
---------------------
hash1 key1 value1
---------------------
hash2 key2 value2
---------------------
...
---------------------
因此,在数据量比较大的时候,建议采用dict的方法进行相关的数据处理方法。