一文搞懂Python?List和Tuple的區(qū)別
一、List和Tuple的基本概念
- List(列表):是 Python 內(nèi)置的一種數(shù)據(jù)類型。 它是一種有序的集合,可以隨時(shí)添加和刪除其中的元素。
- Tuple(元組):也是 Python 內(nèi)置的一種數(shù)據(jù)類型。不可變的有序集合,一旦創(chuàng)建,元素不可更改。
示例代碼:
my_list = [1, 2, 3] my_tuple = (1, 2, 3)
- 注意:元組中只包含一個(gè)元素時(shí),需要在元素后面添加逗號(hào),
my_tuple=(123,)
,如果不加逗號(hào),創(chuàng)建出來的就不是 元組(tuple),而是指123
這個(gè)數(shù)了。這是因?yàn)槔ㄌ?hào) () 既可以表示元組(tuple),又可以表示數(shù)學(xué)公式中的小括號(hào),這就產(chǎn)生了歧義。
二、核心區(qū)別一覽表
特性 | List(列表) | Tuple(元組) |
---|---|---|
可變性 | 可變 | 不可變 |
語法 | [1, 2, 3] | (1, 2, 3) |
占用內(nèi)存 | 較大 | 較小 |
速度 | 較慢 | 較快 |
是否可哈希 | 否 | 是 |
適用場(chǎng)景 | 需要修改數(shù)據(jù) | 不需要修改數(shù)據(jù) |
三、List和Tuple的高效用法
1. List的高效操作
- 批量添加元素
my_list.extend([4, 5, 6])
- 列表推導(dǎo)式
squares = [x**2 for x in range(10)]
- 刪除元素
my_list.remove(2) # 刪除值為2的元素 del my_list[0] # 刪除第一個(gè)元素
常用函數(shù)&方法
函數(shù)&方法 | 描述 |
---|---|
len(list) | 列表元素個(gè)數(shù) |
max(list) | 返回列表元素最大值 |
min(list) | 返回列表元素最小值 |
list(seq) | 將元組轉(zhuǎn)換為列表 |
list.append(obj) | 在列表末尾添加新的對(duì)象 |
list.count(obj) | 統(tǒng)計(jì)某個(gè)元素在列表中出現(xiàn)的次數(shù) |
list.extend(seq) | 在列表末尾一次性追加另一個(gè)序列中的多個(gè)值(用新列表擴(kuò)展原來的列表) |
list.index(obj) | 從列表中找出某個(gè)值第一個(gè)匹配項(xiàng)的索引位置 |
list.insert(index, obj) | 將對(duì)象插入列表 |
list.pop(obj=list[-1]) | 移除列表中的一個(gè)元素(默認(rèn)最后一個(gè)元素),并且返回該元素的值 |
list.remove(obj) | 移除列表中的一個(gè)元素(參數(shù)是列表中元素),并且不返回任何值 |
list.reverse() | 反向列表中元素 |
list.sort([func]) | 對(duì)原列表進(jìn)行排序 |
2. Tuple的隱藏優(yōu)勢(shì)
- 作為字典的鍵
my_dict = {('x', 1): 'value1', ('y', 2): 'value2'}
- 解包賦值
a, b, c = (1, 2, 3)
- 函數(shù)返回多個(gè)值
def get_point(): return (3, 4) x, y = get_point()
四、List和Tuple的性能對(duì)比
Tuple的訪問速度比List快!因?yàn)門uple是不可變的,Python可以對(duì)其做更多優(yōu)化。
性能測(cè)試:
import timeit print(timeit.timeit(stmt="[1,2,3,4,5]", number=1000000)) print(timeit.timeit(stmt="(1,2,3,4,5)", number=1000000))
五、到底該用List還是Tuple?
- 需要頻繁修改數(shù)據(jù)? 用List!
- 數(shù)據(jù)不會(huì)變,追求性能和安全? 用Tuple!
- 要做字典的key? 只能用Tuple!
六、你可能忽略的細(xì)節(jié)
- 單元素Tuple要加逗號(hào):
(1,)
- Tuple可以嵌套List,但List不能作為字典的key
總結(jié)
到此這篇關(guān)于一文搞懂Python List和Tuple的區(qū)別的文章就介紹到這了,更多相關(guān)Python List和Tuple區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Python對(duì)IP進(jìn)行轉(zhuǎn)換的一些操作技巧小結(jié)
這篇文章主要介紹了使用Python對(duì)IP進(jìn)行轉(zhuǎn)換的一些操作技巧小結(jié),包括使用socket模塊里的相關(guān)函數(shù)和匿名函數(shù)實(shí)現(xiàn),需要的朋友可以參考下2015-11-11一文教會(huì)你調(diào)整Matplotlib子圖的大小
Matplotlib的可以把很多張圖畫到一個(gè)顯示界面,這就設(shè)計(jì)到面板切分成一個(gè)一個(gè)子圖,下面這篇文章主要給大家介紹了關(guān)于調(diào)整Matplotlib子圖大小的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06flask-socketio實(shí)現(xiàn)前后端實(shí)時(shí)通信的功能的示例
本文主要介紹了flask-socketio實(shí)現(xiàn)前后端實(shí)時(shí)通信的功能的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04opencv+python實(shí)現(xiàn)圖像矯正
這篇文章主要為大家詳細(xì)介紹了opencv+python實(shí)現(xiàn)圖像矯正,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08Python 實(shí)現(xiàn)子類獲取父類的類成員方法
今天小編就為大家分享一篇Python 實(shí)現(xiàn)子類獲取父類的類成員方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01