對Python列表的簡單探索(一)

2021-10-02 19:56:13 字數 3652 閱讀 2163

最近我在學numpy(python進行科學計算的拓展庫),今天我恰巧看到了上個寒假買來的已經在書架上被冷落的《c++ primer plus》,突發奇想要寫一篇關於python列表的文章。乙個閒的沒事幹的肥宅總能找藉口找點事做……

學過c/c++的朋友都了解,不少演算法都是以陣列操作為基礎的,迴圈+陣列的組合能處理很多問題。我在學習python的時候想找到乙個類似c++陣列這樣的資料格式,剛開始覺得最像的是列表

可當我操作列表的時候,著實吃了一鯨

]為啥列表可以放不同型別的資料嘞??

這是因為c++的陣列和python列表的儲存結構有著本質不同

我們先來看c++的陣列

那麼python列表的結構是怎樣的呢?

python 列表包含乙個指向指標塊的指標,這其中的每乙個指標對應乙個完整的 python 物件,列表中的每一項必須包含各自的型別資訊、引用計數和其他資訊

因為 python 的動態型別特性,可以建立乙個異構的列表

在我學過pyhton列表的操作後,我覺得它更像是c++資料結構裡的線性表,反而不像陣列了,而且pyhton的array就是c風格的陣列

本文重點介紹列表的建立

在習慣了c/c++後我先使用for 迴圈來進行列表的建立

a=

for i in

range(10

):

這無疑是一種c的風格,那在python裡的習慣是怎樣的呢

a=

list

(range(10

))

建立這種有規律的陣列,可以使用range()

range(start,end,step)是有三個引數的方法,前兩個引數組成乙個前閉後開區間,注意是前閉後開,第三個引數規定步長,比如要建立乙個[1,100]的偶數列表

a=

list

(range(2

,101,2

))

那麼,如何建立帶有一種操作的數值列表呢,我們以平方為例,建立乙個1到100的平方的列表

a=

for i in

range(1

,101):

2)

如果你看到這裡吐槽這個**非常c風格的話,說明你對python的風格有點熟悉了

我們完全可以把for迴圈放在列表內部

a=

[i**

2for i in

range(1

,101

)]

雖然**量減少了,但邏輯依舊清晰,這就是流暢的pyhton

那我們要建立乙個單一資料的列表應該怎麼操作

zeros_list=

[i-i for i in

range

(100

)]

我預料到此時氣氛有一絲尷尬。好醜陋的**啊,沒錯,當時的我確實想過這種方法,但python無疑提供了更簡潔的方法

zeros_list=[0

]*100

woc無情……pyhton總能給初學者驚喜

之前提到過,列表是一種動態可變的結構,模擬於c/c++的二維陣列,我在這裡介紹列表巢狀列表(列表可以巢狀字典等別的結構,這裡不做介紹)

a=

for i in

range(3

):list

(range(3

)))print

(a)[[0

,1,2

],[0

,1,2

],[0

,1,2

]]

乙個列表巢狀列表就完成了,也可以無限套娃

列表套列表套列表列表套列表套列表列表套列表套列表……

0但陣列的索引範圍只能是[0,len-1],而列表的索引拓展到了負數

print

(a[-1]

,a[-10])90

-1表示從列表末尾數數第1個即最後乙個

同理-10是倒數第10也就是第乙個

對於巢狀列表來說可以這樣

a[0][0]

把a[0]看成乙個列表名,後面直接加切片是列表非常有意思的操作,可選擇列表的一部分,省去了for迴圈的生硬操作

列表名[start:end:step]
切片的三個引數和range()一樣,再次注意前兩個引數是前閉後開區間。三個引數都可以省略,不同的省略導致不同的結果

a[::

]#遍歷整個列表,相當於a[0:len(a):1]

a[:x]

#從開始到x-1,步長為1

a[x:

]#從x到len(a),步長為1a[:

:2]#遍歷真個列表,步長為2,隔乙個元素讀乙個a[:

:-1]

#將陣列逆序

a[::-1]這個操作我之前介紹過,這是一種非常簡潔的逆序操作

值得注意的是,無論你對切片怎麼操作,原始陣列是不會發生改變的

>>

> a=[1

,2,3

]>>

>

id(a)

2575698557760

>>

>

id(a[::

])2575706379456

使用id查詢變數位址,我們可以發現,切片返回的是乙個新的列表

切片也可以應用在字串上

我是vito,資料科學與大資料技術專業大二的學生,學習python半年。這是我的第三篇原創部落格,以後我會陸續介紹學習python的一點心得。

除了在csdn上發布部落格,我也會在礦大計算機學院資源傳承計畫(resource inheritance plan of cumtcs)這個github資源庫裡分享我的學習資料以及在礦大計算機學院資源傳承計畫·部落格發表我的文章

此圖來自《python資料科學手冊》 【美】jake vanderplas 著

此書已在github開源

Python列表簡單應用

列表是乙個有序並可以修改的集合 list a b c 4 list e print list run a b c 4 e 2 count obj 函式 查詢列表中obj出現的次數。list a b c a print a出現的次數 list count a print b出現的次數 list cou...

Python 列表簡單操作

代表可選引數 foriteminlistname forindex,itemin enumerate listname name wxy wxy lf print name wxy wxy lf name.count wxy 2 name wxy wxy lf print name wxy wxy ...

乙個萌新測試對python的探索 math的應用

最近認識了乙個學python的大一妹子,因為幫他裝環境認識的,知道她是初學,我也剛好只是懂個皮毛,所以打算拿她的課後作業來練習一下,今天就記錄一下圓的面積怎麼求 直奔主題,開始用的最基本的變數與計算符做出來的,然後妹子說可以用math函式又學到乙個新知識,不管以後用到用不到,先了解總之沒錯 第一版 ...