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

相關文章
相關標籤/搜索