最近我在學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函式又學到乙個新知識,不管以後用到用不到,先了解總之沒錯 第一版 ...