若是有了解過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