python|列表和元组有什么区别

若是有了解过python中的列表和元组,你可能会知道相对于列表,元组是不可变的,也就是说元组中的数据不能随意更改。除了列表是用中括号表示而元组是用小括号表示以外,这两种数据类型好像并无什么不一样,都是用来存放一系列的数据,事实真是如此吗?python

a = [1, 3, 5, 7, 'a']

b = (1, 3, 5, 7, 'b')

# 如今改变b中的值
b[2] = 4
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-2-96f3d2fefb53> in <module>()
      4 
      5 # 如今改变b中数据的值
----> 6 b[2] = 4


TypeError: 'tuple' object does not support item assignment

看起来除了元组不可变以外,列表彻底能够取代元组,为何要画蛇添足创造出元组这种类型?其实这背后有更深层的含义,列表是用来表示一组相同类型(相同价值)的数据,而元组用来存放不一样类型(不一样价值)的数据,简单来讲,列表是同质的,而元组是异构的。机器学习

好比说,如今有一本书,书里面有一些批注。咱们用元组来表示书中第几页第几行的内容,像这样:position = (page, line),而后把它放到字典里做为批注的键,表示第几页第几行有批注。同时,咱们用列表来表示这些位置,若是有新的位置,能够加入列表。这符合列表能够更改数据的特色。可是若是更改元组里面的数据就没有意义了,由于这些坐标原本就是存在的。学习

在python的模块中,咱们能够找到不少例子:spa

range(10)
range(0, 10)

好比range方法用来生成一列有序地数据,这些数据是等价的,并无不一样的功能,因此用列表来表示最合适。而像下面的例子:3d

from datetime import datetime
datetime.now()
datetime.datetime(2017, 12, 17, 20, 23, 13, 578752)

当前时间适合用元组来表式,由于元组中每一个数据有不一样的功能,或者说有不一样的价值,像第一个数据表示年份。code

说到这,想起了咱们以前说过的具名元组nametuple,它用来快速的生成一个类,能够当作是类的轻量级替代方法,也很符合咱们上面说的元组的功能。图片


本人才疏学浅,上文中不免有些错误,还请各位品评指正。若是以为写的还行,欢迎关注个人公众号MLGroup,带你走进机器学习的世界。
图片描述ip

相关文章
相关标签/搜索