python中列表(list)和元組(tuple)該如何抉擇?有什麼區別?

2021-12-22 十一星

收錄於話題 #python 2個內容


列表(list)和元組(tuple)是Python中常見的兩種數據結構。列表和元組,都是一個可以放置任意數據類型的有序集合。大多數程式語言中,集合的數據類型必須一致,在python中,同一個列表或元組中的元素可以是不同類型的。
list=[3,7,'Mar','Feb','Jan'] # 列表中同時包含int 和string類型的元素list[3, 7, 'Mar', 'Feb', 'Jan']
tup=("hello",2022) #元組中同時包含int和string類型的元素tup('hello', 2022)

列表和元組的區別

如下代碼所示,我們可以輕鬆的對列表進行修改,如把Jan變為Dec;

list=[3,7,"Mar",'Feb','Jan'] list[4]="Dec"  #python 中的索引同樣從 0 開始,list[4]表示訪問列表的第5個元素Janlist[3, 7, 'Mar', 'Feb', 'Dec']

如果元組也進行同樣的修改,python就會報TypeError,類型錯誤,因為元組是不可變的。
tup=("hello",2022)tup[1]=2012--TypeError  Traceback (most recent call last)<ipython-input-8-5669ecb45950> in <module>      1 tup=("hello",2022)----> 2 tup[1]=2012
TypeError: 'tuple' object does not support item assignment

但是,你就是想對元組做出點"改變",那就只能對元組重新賦值,創建新的元組了;元組就好像你用鋼筆寫下的字,寫上就不能擦掉了,除非換一張紙重寫了,而列表就像是鉛筆寫下的字,寫錯了還可以擦掉更改。
如下圖代碼,我們增加一個元素2012給元組,實際上這相當於創建了一個新的元組了,把原來兩個元組的值依次填充進去。
tup=("hello",2022)new_tup=tup + (2012,) # 創建新的元組 new_tup,依次填充原元組的值new_tup('hello', 2022, 2012)

由於列表是可變的,我們只要在列表的末尾加上想要加的元素即可,如下圖代碼,只是修改原來列表的元素,而不再創建新的列表。
list = [1,2,3,'Jan','Feb','Mar']list.append(4)list[1, 2, 3, 'Jan', 'Feb', 'Mar', 4]

通過以上代碼,我們已經了解列表和元組的基本區別,下面我們再看看列表和元組的操作和注意事項。
負數索引從尾部開始,倒數第一個元素的索引為-1,-2表示倒數第二個元素,以此類推。
list=[1, 2, 3, 'Jan', 'Feb', 'Mar', 4]list[-1]4
tup=('hello', 2022, 2012)tup[-1]2012

list=[1, 2, 3, 'Jan', 'Feb', 'Mar', 4]list[1:3] #返回列表中索引從1到2的子列表[2,3]
tup=(1,2,3,4,5)tup[1:3]#返回元組中索引從1到2的子列表(2, 3)

list = [[1, 2, 3],['Jan', 'Feb', 'Mar']]# 列表的每一個元素可以是一個列表tup=((1,2,3),(4,5)) # 元組的每一個元素也可以是一元組

list=[1, 2, 3, 'Jan', 'Feb', 'Mar', 4] for i in list:    print(i)123JanFebMar4tup=(1,2,3,4,5)for i in tup:    print(i)12345

list=[1, 2, 3, 2, 3, 1, 4] list.count(1) 2 list.index(4) 6 list.reverse() list[4, 1, 3, 2, 3, 2, 1]list.sort()list[1, 1, 2, 2, 3, 3, 4]

list=[1,2,3,4,5,6]list.__sizeof__() #__sizeof__()列印系統分配空間的大小88
tup=(1,2,3,4,5,6)tup.__sizeof__()72

由上圖可以看出,在列表和元組中放了相同的元素,但是元組的存儲空間要比列表的少16位元組,因為列表在存儲元素的時,還需要存儲指針來指向對應的元素。由於文章篇幅,列表空間分配的機制將在另一篇文章中介紹。

列表和元組的性能對比

通過了解列表和元組存儲方式的差異,我們可以得知:元組要比列表更輕量級些,元組性能速度要比列表略勝一籌。

我們再來看下初始化和索引訪問的時間對比。

python -m timeit "x=[1,2,3,4,5,6,7,8]"5000000 loops, best of 5: 55.1 nsec per looppython -m timeit "x=(1,2,3,4,5,6,7,8)"20000000 loops, best of 5: 11.5 nsec per loop

以上初始化耗時對比可以看到,元組的初始化速度,要比列表快 4 倍多。

索引訪問

python -m timeit -s "x=[1,2,3,4,5,6,7,8]" "y=x[3]"10000000 loops, best of 5: 29.7 nsec per looppython -m timeit -s "x=(1,2,3,4,5,6,7,8)" "y=x[3]"10000000 loops, best of 5: 31.8 nsec per loop

兩者訪問耗時的速度差別非常小,如果還想進行增加、刪減或者改變元素,那還是選擇列表吧,因為元組創建之後不可改變,因此元組比較適合存儲數據和數量不改變的場景,如一年的月份名稱,學生成績等;列表創建之後可以進行增刪改查,可以用來存儲商品名稱、網站日誌等場景。總結列表和元組都是有序的,可以存儲任意數據類型的集合,區別如下:列表是可變的,長度大小可變,可隨意增刪改查元素,存儲空間略大於元組,性能稍弱於元組,不能作為字典的鍵元組是不可變的,長度大小固定,不能進行增刪改操作,元組比列表訪問和處理速度快,能作為字典的鍵。

相關焦點

  • Python基礎篇——關於元組(tuple)和列表(list)區別
    一、前言在Python數據類型中有兩個對象:元組 tuple 和列表 list 。二者寫法和用法十分相似,有的同學就會去網上查找它們之間的區別,查到的無非以下幾種說法:list 是可變的,元組 tuple 是不可變的。由於 tuple 不可變,所以使用 tuple 可以使代碼更安全。等等 ...
  • python的數據類型(四):列表List和元組Tuple
    例如:L1 = [1, 2, 3]L1.append(4)          #L1 = [1, 2, 3, 4]L1.remove(4)          #L1 = [1, 2, 3]L1.extend([4, 5, 6]  #L1 = [1, 2, 3, 4, 5, 6]L1.pop(0)
  • 【Python從入門到精通】(六)Python內置的數據類型-列表(list)和元組(tuple)不信你用不到
    本文分十個章節介紹數據類型中的列表(list)和元組(tuple),從使用說到底層實現,包您滿意乾貨滿滿,建議收藏,需要用到時常看看。小夥伴們如有問題及需要,歡迎踴躍留言哦~ ~ ~。一淺: 列表(list)的介紹列表作為Python序列類型中的一種,其也是用於存儲多個元素的一塊內存空間,這些元素按照一定的順序排列。
  • Python 列表和元組的區別是什麼?
    列表 VS 元組一個 Python 初學者的普遍疑問:列表與元組的區別是什麼?
  • Python的List與Tuple
    和字符串一樣,列表同樣可以被索引和截取,列表被截取後返回一個包含所需元素的新列表。列表截取的語法格式如下:變量[頭下標:尾下標]索引值以 0 為開始值,-1 為從末尾的開始位置。加號(+)是列表連接運算符,星號(*)是重複操作。
  • 從零開始學Python-Day9-集合list和元組tuple
    內部的元素可以是不同數據類型,一個list也可以作為另一個list的元素,如下,Q這個list裡既有字符串,又有數值,又有布爾值;我們把之前的花名冊這個序列添加到Q的末尾,最終的Q序列裡面就有了四個元素,最後一個元素是另一個list序列花名冊,話有點繞,但還算好理解:如果在Q中要取到木人張該如何操作?
  • Python中列表(list),元組(Tuple),字典(Dict)和集合(Set)的比較
    1.1 元素索引列表、元組的索引都是從起始位置0開始的,甚至可以採用負數,例如:>>> list[0]1>>> list[-1]5>>> list[:-1][1, 2, 3, 4]>>> tuple[-1]5>&
  • 一分鐘學Python|Python的列表和元組
    list和tuple首先來一波簡單粗暴的對比:1、python中的列表list是變量,而元組tuple是常量。簡單地說元組是固定不可改變的,意味著一旦被創建它的內容無法被修改;列表則不同,被創建可根據自己的想法隨意改變,同時改變列表的函數方法也有很多。
  • Pyhton中的數據結構 | 列表和元組如何進行選擇
    這裡總結一下Python中的內置數據結構(Built-in Data Structure):列表list、元組tuple涵蓋的僅有部分重點,詳細地去介紹每個知識點並未涉及。在之前的內容中,我們知道了list列表,tuple元組數據結構,這一節中,我們深入探討下列表和元組。首先,我們需要弄清楚最基本的概念,什麼是列表和元組呢?
  • Python入門:4000字能把元組tuple講透嗎?
    公眾號:尤而小屋作者:Peter編輯:Peter大家好,我是Peter在前面介紹的python數據類型:列表list,我們發現list是可以進行修改的。一、如何寫文章 最近有朋友問過我:Peter,你是如何寫一篇公眾號的文章?
  • Python數據類型之元組tuple
    # 元組(tuple)是 Python 中另一個重要的序列結構,和列表類似,元組也是由一系列按特定順序排序的元素組成。
  • 元組(tuple)-Python基本數據類型之四
    在python中,元組這種數據結構同列表類似,都可以描述一組數據的集合,它們都是容器,是一系列組合的對象,不同的地方在於,元組裡的元素是不能更改的,它們之間的差異性我們用一個例子來說明一下:列表:,和列表的區別在於,列表是用中括號,例如:>>>student= (1, "tom", "2008-05-06", 10, 135.7)學過C++的話,感覺有點像 structs 結構體,可以先這麼理解加深印象;
  • Python學習筆記:列表、元組和字典
    第3章 列表、元組和字典python內置的三種常見數據結構:列表(list)、元組(tuple)和字典(dict)。這三種數據結構都可用於保存多個數據項。列表和元組比較相似,它們都按順序保存元素,每個元素都有自己的索引,因此列表和元組都可通過索引訪問元素。二者的區別在於列表是可修改的,元組不可修改。字典則以key-value的形式保存數據。
  • Python容器:列表與元組
    與字符串不同的是,元組和列表並不要求所有元素的種類相同,每個元素都可以是任何python類型的對象。列表可變,賦值後可插入或刪除其中的元素。元組不可變,賦值後不可更改。1.2使用list()將其他數據類型轉換成列表將一個字符串轉換成了由單個字母組成的列表>>>list('cat')['c','a','t']將一個元組轉換成了列表>>>a_tuple=('ready','fire','aim')>>>list(a_tuple
  • 數據類型介紹——tuple、list和range對象
    根據官網(https://docs.python.org/3/library/stdtypes.html)描述,Python解釋器中主要的內置類型有數字、序列、映射、類、實例和異常(The following sections describe the standard types that are built into the interpreter.
  • Python入門14-元組tuple
    另一種有序列表叫元組(tuple)。tuple和list非常類似,但是tuple一旦初始化就不能修改。
  • Python的list和tuple
    listPython內置的一種數據類型是列表:list。list是一種有序的集合,可以隨時添加和刪除其中的元素。tuple另一種有序列表叫元組:tuple。tuple和list非常類似,但是tuple一旦初始化就不能修改,比如同樣是列出同學的名字:>>> classmates = ('Michael', 'Bob', 'Tracy')現在,classmates這個tuple不能變了,它也沒有append(),insert()這樣的方法。
  • Python中字符串、列表、元組、字典之間的相互轉換
    (type(tuple_3))print(tuple_1)print(tuple_2)print(tuple_3)運行結果:使用Python中字符串的內置方法split()Python split() 通過指定分隔符對字符串進行切片,如果參數 num 有指定值,則分隔 num+1 個子字符串
  • 10個掌握Python列表,集合,元組的示例
    Python中的一切都是一個對象。每個對象都有自己的數據屬性和與之關聯的方法。為了有效和恰當地使用一個對象,我們應該知道如何與它們進行交互。列表、元組和集合是3種重要的對象類型。它們的共同點是,它們被用作數據結構。本文中,我們將看到這些結構如何收集和存儲數據以及我們可以對它們進行的操作。並看到它們之間的異同。讓我們首先簡要解釋一下這些對象是什麼。
  • Python——list列表和tuple元組
    list列表是Python內置的一種數據類型。list是一種有序的集合,可以隨時添加和刪除其中的元素。用len()函數可以獲得list元素的個數:運行結果如下:用索引可以來訪問list中每一個位置的元素,記得索引是從0開始的:print(classmates[0])print(classmates[1])print(classmates