1. 程式人生 > 其它 >【python從入門到放棄】1.list&tuple

【python從入門到放棄】1.list&tuple

技術標籤:python從入門到放棄python列表

文章目錄

列表

陣列:list[]
陣列追加:list.append()
陣列插入索引為n的元素:list.insert(n,’’)
陣列中刪除最後一個元素:list.pop()
刪除指定位置元素:list.pop(i)(i為索引位置)
替換某個元素:list[i]=’’

List中元素的資料型別可以不同
L = [‘Apple’,123,True]

List元素可以是另一個List
S = [‘python’,‘c++’,[‘asp’,‘java’],‘html’]
Len(S) = 4

元組

另一種有序叫元組:tuple,但tuple一旦初始化就不能修改,其餘基本同list
tuple採用圓括號;list採用方括號
只有一個元素的tuple定義是必須加一個逗號(,)來消除歧義 t = (1,)

例:“可變的”tuple

>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t

在這裡插入圖片描述

tuple的“不變”指的是,tuple的每個元素的指向永遠不變,指向一個list,就不能改成指向其他物件,但指向的這個list本身是可變的。

列表(list)是動態的,長度大小不固定,可以隨意地新增、刪減或者改變元素(Mutable)
元組(tuple)是靜態的,長度大小固定,無法刪減或者改變(immutable)
兩者可以通過 list() 和 tuple() 函式相互轉換

list((1, 2, 3)) ——>[1,2,3]
tuple([1,2,3]) ——>(1,2,3)

在這裡插入圖片描述

內建函式

列表和元組常見的內建函式
l = [3, 2, 3, 7, 8, 1]
l.count(3) ——>2 ——統計列表或元組中元素出現的次數
l.index(7) ——>3 ——返回列表或元組中元素第一次出現的索引
l.reverse() ——>[1, 8, 7, 3, 2, 3] ——原地倒轉列表(元組沒有)

l.sort() ——>[1, 2, 3, 3, 7, 8] ——列表排序(元組沒有)
reversed() 和 sorted() 同樣表示對列表或元組進行倒轉和排序
reversed() 返回一個倒轉後的迭代器;sorted() 返回拍好序的新列表

儲存方式

列表和元組儲存方式的差異
列表是動態的、可變的;元組是靜態的、不可變的

l = [1, 2, 3]
l.__sizeof__() ——>64

(由於列表是動態的,因此它需要儲存指標,來指向對應的元素,對於int型,8位元組;另外,由於列表可變,所以需要額外儲存已經分配的長度大小:8位元組,這樣才可以實時追蹤列表空間的使用情況,當空間不足時,及時分配額外空間)

tup = (1, 2, 3)
tup.__sizeof__() ——>48

空列表的儲存空間為 40位元組,空元組的儲存空間為 24位元組
在這裡插入圖片描述

效能

列表和元組的效能
元組比列表更加輕量級一些,總體上來說,元組的效能速度優於列表。

如果一個列表在元組中的話,其實這個元組是可變的,只是這個可變只是能改變該列表中的內容

計算初始化一個相同元素的列表和元組分別所需時間:

python -m timeit 'x= (1,2,3,4.5,6)'
python -m timeit 'x = [1,2,3,4,5,6]'

在這裡插入圖片描述
元組的初始化速度比列表快很多

但如果是索引操作的話,兩者的速度差別非常小

python3 -m timeit -s 'x=[1,2,3,4,5,6]' 'y=x[3]'
python3 -m timeit -s 'x=(1,2,3,4,5,6)' 'y=x[3]'

在這裡插入圖片描述
如果想要增加/刪減/改變元素,列表顯然更優,因為對於元組,必須通過新建一個元組來完成。

使用場景

列表和元組的使用場景
1、如果儲存的資料和數量不變,比如你有一個函式,需要返回的是一個地點的經緯度,然後直接傳給前端渲染,那麼選用元組更合適

def get_location():
    return(longitude, latitude)

2、如果儲存的資料或數量是可變的,比如社交平臺上的一個日誌功能,是統計一個使用者在一週之內看了哪些使用者的帖子,那麼使用列表更合適