Python的基础数据结构有:列表(list
), 元祖(tuple
), 字典(dict
), 字符串(string
), 集合(set
)等,区别联系如下:
数据类型 | 列表 (list) |
元祖 (tuple) |
集合 (set) |
字典 (dictionary) |
|
---|---|---|---|---|---|
表示 | [] |
() |
{} |
{} |
|
举例 | a_list = [1, True, ‘aa’] |
a_tuple = (1, True, ‘aa’);<br> t2 = (1 ,)
|
a_set = {1, True, ‘aa’};<br> s = set( [1, True, ‘aa’]) |
a_dict = {‘name’: ‘xuan’, ‘age’: 21} |
|
是否有序 | 有序 | 有序 | 无序 | 无序 | |
是否读写 | 读写 | 只读 | 读写 | 读写 | 读写 |
空定义 | a_list = [] |
a_tuple = () |
a_set =set();<br>not_sure = {} 空字典 |
a_dict = {} |
|
元素可修改 | a_list[0] = 23 |
否 | 否 | a_dict[‘age’] = 30 |
|
下标访问 | a_list[0] = 23 |
a_tuple[0] |
否 | a_dict[‘age’] = 30 |
|
添加元素 | +、append、extend、insert |
不可添加 | add、update |
a_dict[‘new_key’] = ‘value’ |
|
删除元素 | del、remove、pop()、pop(1)、clear |
不可删除 | discard、remove、pop、clear |
pop、popitem、clear |
|
元素查找 | index、count、in |
in |
in |
a_dict[‘key’] |
|
布尔真值 | 非空 | 非空 | 非空 | 非空 | |
定义 | 列表(list )是有序 的集合,可以存放不同数据类型的数据,并且list 中的每个元素的都对应着一个索引 来标记其位置,且索引从0开始。 |
tuple 与list 类似,不同之处在于tuple 中的元素不能 进行修改 。而且tuple使用小括号() ,list 使用方括号[] 。 |
dic 字典是另一种可变 的容器模型,且可存储任意 类型对象。字典的每个键值(key:value) 对用冒号(: )分割,每个对之间用逗号(, )分割,整个字典包括在花括号{} 中 |
set() 函数是创建一个无序不重复 元素集,可添加,删除数据,还可以计算交集、差集、并集 等。python 的集合类型和 其他语言类似, 是一个无序 不重复元素集, 基本功能包括关系测试和消除重复元素.集合对象还支持union(联合), intersection(交), difference(差) 和sysmmetricdifference(对称差集) 等数学运算,和我们初中数学学的集合的非常的相似。 |
一、列表list
、元祖-tuple
、集合set
、字典dic
全方位分析
数据结构 | 表示 | 分析 |
---|---|---|
列表list |
[] |
列表list ,用中括号“[ ] ”表示1. 任意 对象的有序 集合 列表是一组任意类型的值,按照一定顺序组合而成的 2.通过 偏移 读取 组成列表的值叫做元素(Elements)。每一个元素被标识一个索引, 第一个 索引是0 ,序列的功能都能实现 3.可变长度,异构以及任意嵌套 列表中的元素可以是任意类型,甚至是列表类型,也就是说列表可以嵌套 4. 可变 的序列 支持 索引、切片、合并、删除 等等操作,它们都是在原处进行修改列表 5.对象引用数组 列表可以当成普通的 数组 ,每当用到引用时,Python 总是会将这个引用指向一个对象,所以程序只需处理对象的操作。当把一个对象赋给一个数据结构元素或变量名时,Python 总是会存储对象的引用,而不 是对象的一个拷贝
|
元祖tuple |
() |
1. 任意 对象的有序 集合 与列表相同 2.通过 偏移存取 与列表相同 3.属于 不可变 序列类型 类似于字符串,但元组是不可变的,不支持在列表中任何原处修改操作,不支持任何方法调用 4. 固定 长度、异构、任意 嵌套 固定长度即元组 不可变 ,在不被拷贝的情况下长度固定,其他同列表 5.对象引用的数组 与列表相似,元祖是对象引用的数组> tuple 和list 相比,元祖tuple 有以下特点1.比列表操作速度 快 2.对数据“ 写保护 3.可用于字符串格式化中 4.可作为字典的 key |
字典dic |
{} |
1.通过 键 而不是偏移量 来读取 字典就是一个关联数组,是一个通过关键字索引的对象的集合,使用键-值( key-value )进行存储,查找速度快 2. 任意 对象的无序 集合字典中的项没有 特定顺序 ,以“键”为象征 3. 可变长 、异构、任意嵌套同列表,嵌套可以包含列表和其他的字典等 4.属于可变映射类型 因为是无序,故不能进行序列操作,但可以在远处修改,通过 键映射到值 。字典是唯一内置的映射类型(键映射到值的对象) 5. 对象 引用表 字典存储的是对象 引用 ,不 是拷贝 ,和列表一样。字典的key 是不能变的,list 不能作为key ,字符串、元祖、整数 等都可以 dic 和list 比较,dict 有以下几个特点:1.查找和插入的速度极 快 ,不会随着key 的增加而增加 2.需要占用 大 量的内存 ,内存浪费多 而list相反: 1.查找和插入的时间随着元素的增加而增加 2.占用空间小,浪费内存很少 所以, dict 是用空间来换取时间的一种方法 |
集合 |
() |
1.是一组 key的集合 ,但不存储value ,并且key不能重复 创建一个 set ,需要提供一个list 作为输入集合,s = set([1,2,3]) ,注意,传入的参数[1, 2, 3] 是一个list ,而显示的set([1, 2, 3]) 只是告诉你这个set 内部有1,2,3 这3个元素,显示的[ ] 不表示这是一个list 2. 重复 元素在set 中自动被过滤 set 可以看成数学意义上的无序 和无重复 元素的集合 ,因此,两个set 可以做数学意义上的交集、并集 等操作还有一种集合是 forzenset( ) ,是冻结的集合,它是不可变 的,存在哈希值,好处是它可以作为字典的key ,也可以作为其它集合的元素。缺点是一旦创建便不能更改 ,没有add,remove 方法set 和dict 对比,集合set 有以下特点1. set 和dict 的唯一区别仅在于没有 存储对应的value 2. set 的原理 和dict一样 ,同样不 可以放入可变 对象,因为无法 判断两个可变对象是否相等 ,也就无法保证set 内部“不会有重复 元素” |
二、字典dic、列表list、集合set、元祖tuple相互比较
比较 | 详情 |
---|---|
字典dict 和列表list 的比较 |
dict 的查找和插入的速度极快,不会随着key 的增加而变慢。但是需要占用大量的内存,内存浪费多。相反,list 查找和插入的时间随着元素的增加而增加。但是占用空间小,浪费内存很少。 |
字典dict 和集合set 比较 |
唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。 |
元祖tuple 与列表list 比较 |
tuple 与list 类似,不同之处在于tuple中的元素不能进行修改。而且tuple 使用小括号() ,list 使用方括号[] 。 |
三、Python一些内置函数
编号 | 函数 | 注释 |
---|---|---|
1 |
cmp (A, B) |
比较可为list、tuple等的A、B,A>B为1,A=B为0,小于为-1 |
2 |
len (obj) |
计算元素个数。 |
3 |
max (obj) |
返回元素最大值。 |
4 |
min (obj) |
返回元素最小值。 |
5 |
reversed (obj) |
对元素进行翻转 |
6 |
enumerate (obj) |
遍历list的元素,返回序号及其对应的元素 for x, y in list:
|
7 |
zip () |
打包成tuple (元组),然后返回由这些tuples组成的list(列表) |
列表[]、元组()和字符串都是序列,字符串是字符的序列,列表和元祖是任意类型的序列
注:本博主csdn同步链接
参考:
[1].python列表(list)、元祖(tuple)、集合(set),和字典(dictionary)的比较
[2].Python学习笔记(四)—列表(list)、元组(tuple)和字典(dictionary)、集合(set)
[3].Python学习笔记(四)—列表(list)、元组(tuple)和字典(dictionary)、集合(set)