Python十大列表操作技巧分享
列表展開
對(duì)于形如 [ 1 , [ 2 ] , [ [ 3 ] , 4 ] , 5 ] 的列表,將其展開為 [ 1 , 2 , 3 , 4 , 5 ]。算法思路為,遍歷列表A0中的元素,如果該元素A1仍為列表,則將A1的元素追加到A0的末尾。
def flatten(lst): i = 0 while(i<len(lst)): if isinstance(lst[i],list): lst.extend(lst[i]) i += 1 return [n for n in lst if not isinstance(n,list)] lst = [1, [2], [[3], 4], 5] flatten(lst) # [1, 5, 2, 4, 3]
降維
當(dāng)列表中的所有數(shù)據(jù)均為列表時(shí),可以通過(guò)單星號(hào)索引之后,用itertools中的chain函數(shù)進(jìn)行拼接。
from itertools import chain a = [[1, 2], [3, 4], [5, 6]] chain(*a) # [1, 2, 3, 4, 5, 6]
分塊
python內(nèi)置了map函數(shù),可以遍歷列表并對(duì)每個(gè)元素進(jìn)行映射。對(duì)于list(map(func,myList))
,等價(jià)于[func(e) for e in myList]
。根據(jù)這個(gè)特性,可以對(duì)列表進(jìn)行分塊。
from math import ceil #ceil為向上取整 def chunkByFor(lst, size): return [lst[x*size:x*size+size] for x in range(0,ceil(len(lst)/size))] def chunkByMap(lst, size): return list( map(lambda x: lst[x * size:x * size + size], list(range(0, ceil(len(lst) / size))))) chunk([1,2,3,4,5],2) # [[1,2],[3,4],5]
轉(zhuǎn)置
zip可以像拉鏈一樣將數(shù)組中對(duì)應(yīng)的值縫合起來(lái),以元組的形式重新存儲(chǔ)。根據(jù)這個(gè)特性,可完成列表的"轉(zhuǎn)置"。
lst = [[1,2], [3,4], [5,6]] list(zip(*lst)) #[(1, 3, 5), (2, 4, 6)]
查找眾數(shù)
列表中封裝了count方法,可以統(tǒng)計(jì)其中的元素個(gè)數(shù),例如
lst = [1,2,1,2,3,2,1,4,2] lst.count(1) # 3 即lst中1出現(xiàn)了3次
而最大值選取函數(shù)max中有一個(gè)參數(shù)key,表示選取最大值的依據(jù),例如
x = [-2,-1,0,1,2] def test(x): return x**2-2*x max(x,key=test) # -2
表示選出當(dāng)函數(shù)test
值最大時(shí)的自變量。
根據(jù)這兩個(gè)特點(diǎn),可以得到查找列表中出現(xiàn)次數(shù)最多元素的方法為
lst = [1,2,3,4,5,2,3,2,1,2,4] max(set(lst),key=lst.count) # 2
判斷重復(fù)元素
借助集合中元素不重復(fù)的特性,可以檢驗(yàn)非集合數(shù)據(jù)中是否有重復(fù)數(shù)據(jù)。下面代碼種,set
可將列表轉(zhuǎn)換為集合,如果轉(zhuǎn)換之后元素個(gè)數(shù)不變,則說(shuō)明列表中沒(méi)有重復(fù)元素。
def isUnique(lst): return len(lst) == len(set(lst)) x = [1,2,3,4,5,5] y = [1,2,3,4,5] isUnique(x) # False isUnique(y) # True
比較元素差異
在python中,集合set
提供了類似做差的操作difference
。對(duì)于集合A
和B
而言,若想實(shí)現(xiàn)A-B
的功能,可采取A.difference(B)
的方案。
對(duì)于其他數(shù)據(jù)結(jié)構(gòu),可先轉(zhuǎn)為set
再行做差。且difference
會(huì)自動(dòng)將輸入變量轉(zhuǎn)為set
。
A = [1,2,3] B = [1,2,4] list(set(A).difference(B)) # [3]
比較列表計(jì)算后的差異
現(xiàn)有一函數(shù)func
,對(duì)于兩組數(shù)據(jù)A
和B
,如果希望得到func(A)
和func(B)
的差別,也可以采用set
的特性。
def funcMinus(A, B, func): B = set(map(func, B)) #剔除func(B)中的重復(fù)元素 return [a for a in A if fn(a) not in B]
- 篩選數(shù)據(jù)
filter
是python的內(nèi)置函數(shù),用于過(guò)濾不符合條件的數(shù)據(jù)。list(filter(func,myList))
等價(jià)于[e for e in myList if func(e)==1]
。
為列表添加索引
enumerate
可以將列表、元組等組合為索引序列,并可以聲明初始值,例如
orders = ['first','second','third'] list(enumerate(orders)) # [(0, 'first'), (1, 'second'), (2, 'third')] list(enumerate(orders,2)) # [(2, 'first'), (3, 'second'), (4, 'third')]
這可以非常方便地應(yīng)用到for
循環(huán)中
>>> for i,val in enumerate(orders,1): ... print(i,val) ... 1 first 2 second 3 third
回文
在python中,對(duì)列表或者字符串采用:
進(jìn)行索引,例如a:b
指的是從a到b的數(shù)據(jù);當(dāng)采用雙引號(hào)::
時(shí),引號(hào)間的值的意義就發(fā)生了變化,例如a:b:c
表示從a到b,間隔為c的數(shù)據(jù)。
據(jù)此,可以得到::-1
表示將字符串顛倒過(guò)來(lái),據(jù)此可以判斷一個(gè)字符串是否為回文結(jié)構(gòu)
>>> s = "abcde" >>> s[::-1] 'edcba' >>> s == s[::-1] False
到此這篇關(guān)于Python十大列表操作技巧分享的文章就介紹到這了,更多相關(guān)Python列表操作技巧內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python利用高階函數(shù)實(shí)現(xiàn)剪枝函數(shù)
這篇文章主要為大家詳細(xì)介紹了python利用高階函數(shù)實(shí)現(xiàn)剪枝函數(shù)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03Python的Pandas時(shí)序數(shù)據(jù)詳解
這篇文章主要為大家詳細(xì)介紹了Pandas時(shí)序數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03Python爬蟲之使用MongoDB存儲(chǔ)數(shù)據(jù)的實(shí)現(xiàn)
本文主要介紹了Python爬蟲之使用MongoDB存儲(chǔ)數(shù)據(jù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06Python 實(shí)現(xiàn)購(gòu)物商城,含有用戶入口和商家入口的示例
下面小編就為大家?guī)?lái)一篇Python 實(shí)現(xiàn)購(gòu)物商城,含有用戶入口和商家入口的示例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09Python 實(shí)現(xiàn)打印單詞的菱形字符圖案
這篇文章主要介紹了Python 實(shí)現(xiàn)打印單詞的菱形字符圖案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04Python內(nèi)置類型性能分析過(guò)程實(shí)例
這篇文章主要介紹了Python內(nèi)置類型性能分析過(guò)程實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01詳解Python3 定義一個(gè)跨越多行的字符串的多種方法
這篇文章主要介紹了詳解Python3 定義一個(gè)跨越多行的字符串的多種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09OpenCV-Python實(shí)現(xiàn)輪廓檢測(cè)實(shí)例分析
這篇文章主要介紹了OpenCV-Python實(shí)現(xiàn)輪廓檢測(cè)實(shí)例分析,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01