python中常见的数据结构:列表-List、元祖-Tuple

  • 列表和元祖都是一个可以放置任意数据类型的有序集合,对于大多数语言来说集合的数据类型必须一致,但是python却可以不相同,列表和元祖中的元素都可以随意嵌套

Python 元祖和list的区别 python元祖和列表_嵌套

  • 列表和元祖中的元素要是是字符时,需要用括号括起来

Python 元祖和list的区别 python元祖和列表_Python 元祖和list的区别_02

  • 列表和元祖的区别:

1、列表是动态的,长度大小不固定,可以随意增加、删除、和改变元素,而不改变列表的变量名称

2、元祖是静态的,长度大小固定,无法增加,删除,和改变元素,如果想改变一个元祖,只能重新开辟一块内存空间,来创建一个新的元祖,

  • 列表和元祖的基本操作以及注意事项

1、列表和元祖都支持 index索引 [] 、以及负数索引 [-1],

2、列表和元祖都支持切片操作,第二个:后面是步长,当步长是-1时,表示对列表反转

Python 元祖和list的区别 python元祖和列表_嵌套_03

Python 元祖和list的区别 python元祖和列表_python_04

列表和元祖之间可以随意转换,通过tuple 和list转化

Python 元祖和list的区别 python元祖和列表_Python 元祖和list的区别_05

  • 列表和元祖常见的内置函数

m.count(item) 、n.count(item) 统计列表、元祖中某一个元素出现的次数

m.index(item)、n.count(item) 统计列表、元祖中某一个元素第一次出现的index索引

m.reverse()、m.sort()  分别表示对列表进行原地反转和排序,但是元祖没有这两个方法,因为元祖不可变,

m.sort(reverse=True) 从大到小排序,m.sort(reverse=False) 从小到大排序

Python 元祖和list的区别 python元祖和列表_嵌套_06

reversed(m)reversed(n)分别对列表和元祖进行反转,并返回一个新的倒转之后的迭代器,可以使用list、tuple进行转化

Python 元祖和list的区别 python元祖和列表_Python 元祖和list的区别_07

sorted(m,reverse=True)、 sorted(n,reverse=True),返回一个排序之后的新的列表,元祖也会被返回一个列表list

Python 元祖和list的区别 python元祖和列表_元组_08

  • 列表和元祖的存储方式,python中列表为了减少每次增加和删除操作时空间分配的开销,python每次分配空间都会额外多分配一些空间,这样的机制叫做 over-allocating,来保证操作的高效性
  • 元祖长度大小固定,元素不可变,所以元祖的存储空间固定

Python 元祖和list的区别 python元祖和列表_嵌套_09

  • 列表和元祖性能

Python 元祖和list的区别 python元祖和列表_元组_10

初始化一个列表和元祖,元祖的性能要比列表快10倍左右,通过python3 -m timeit "t=[]" 来获取创建list所需的时间

  • 列表和元祖的使用场景

如果存储的数据是一个不变的值,使用元祖来存储

如果存储的数据是一个变化的值,使用列表来存储


列表中的每个元素都被分配一个数字作为索引,用来表示该元素在列表内所排在的位置。第一个元素的索引是0,第二个索引是1,依此类推,Python的列表是一个有序可重复的元素集合,可嵌套、迭代、修改、切片、追加、删除,成员判断

从数据结构角度看,Python的列表是一个可变长度的顺序存储结构,每一个位置存放的都是对象的指针。

  • 列表的特殊操作

Python 元祖和list的区别 python元祖和列表_Python 元祖和list的区别_11

  • 列表操作的常用函数

Python 元祖和list的区别 python元祖和列表_元组_12

>>> l=['a',1,2,'c']
>>> max(l)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '>' not supported between instances of 'int' and 'str'
>>> min(l)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'int' and 'str'
>>> 

注意:max、min在Python3中,不能对不同类型的对象进行大小的比较了。
  • 列表遍历

Python 元祖和list的区别 python元祖和列表_嵌套_13

  • 列表操作的常用内置方法

Python 元祖和list的区别 python元祖和列表_嵌套_14

Python 元祖和list的区别 python元祖和列表_嵌套_15

根据以上代码的tracback可以知道,append()里面只能追加一个元素,sort()排序只能对相同类型的元素进行排序


  • 列表与元祖相同操作
1、使用方括号加下标访问元素
2、切片(形成新元组对象)
3、count()/index()
4、len()/max()/min()/tuple()
  • 列表与元祖的不同操作,(元祖中没有的功能)
1、修改、新增元素
2、删除某个元素(但可以删除整个元组)
3、所有会对元组内部元素发生修改动作的方法。例如,元组没有remove,append,pop等方法。

元组只保证它的一级子元素不可变,对于嵌套的元素内部,不保证不可变!

>>> tup = ('a', 'b', ['A', 'B'])
>>> tup[2][0] = 'X'
>>> tup[2][1] = 'Y'
>>> tup 
('a', 'b', ['X', 'Y'])