史上最全:python中列表(list)、元祖(tuple)、字典(dict)、字符串(string)、集合(set)的区别与联系

史上最全:python中列表(list)、元祖(tuple)、字典(dict)、字符串(string)、集合(set)的区别与联系

Python容器定义

容器:用来存储和组织其他对象的对象。容器里面可以放很多东西,这些东西可以是字符串,可以是整数,可以是自定义类型,然后把这些东西有组织的存放在内存中
Python容器:列表(list),元祖(tuple),集合(set),字典(dict),队列(queue)等

一、列表(list), 元祖(tuple), 字典(dict), 字符串(string), 集合(set)区别与联系概括 ★★★★★

数据类型 列表
(list)
元祖
(tuple)
集合
(set)
字典
(dictionary)
表示 [] () () {}
举例 a_list = [1, True, ‘aa’] a_tuple = (1, True, ‘aa’);
t2 = (1,)
a_set = {1, True, ‘aa’};
s = set( [1, True, ‘aa’])
a_dict = {‘name’: ‘xuan’, ‘age’: 21}
是否有序 有序 有序 无序 无序
是否读写 读写 只读 读写 读写
空定义 a_list = [] a_tuple = () a_set = set();
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相比
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对比

1.set和dict的唯一区别仅在于没有存储对应的value
2.set的原理和dict一样,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”

三、字典-列表-集合-元祖相互PK ★★☆☆☆

比较 详情
字典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(列表)

其他:列表[]、元组()和字符串都是序列,字符串是字符的序列,列表和元祖是任意类型的序列

注:本博主同步“简书”链接

参考链接

[1].python列表(list)、元祖(tuple)、集合(set),和字典(dictionary)的比较
[2].Python学习笔记(四)—列表(list)、元组(tuple)和字典(dictionary)、集合(set)
[3].Python学习笔记(四)—列表(list)、元组(tuple)和字典(dictionary)、集合(set)