Python十大列表操作技巧分享
列表展開
對于形如 [ 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]
降維
當列表中的所有數(shù)據(jù)均為列表時,可以通過單星號索引之后,用itertools中的chain函數(shù)進行拼接。
from itertools import chain a = [[1, 2], [3, 4], [5, 6]] chain(*a) # [1, 2, 3, 4, 5, 6]
分塊
python內(nèi)置了map函數(shù),可以遍歷列表并對每個元素進行映射。對于list(map(func,myList))
,等價于[func(e) for e in myList]
。根據(jù)這個特性,可以對列表進行分塊。
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ù)組中對應(yīng)的值縫合起來,以元組的形式重新存儲。根據(jù)這個特性,可完成列表的"轉(zhuǎn)置"。
lst = [[1,2], [3,4], [5,6]] list(zip(*lst)) #[(1, 3, 5), (2, 4, 6)]
查找眾數(shù)
列表中封裝了count方法,可以統(tǒng)計其中的元素個數(shù),例如
lst = [1,2,1,2,3,2,1,4,2] lst.count(1) # 3 即lst中1出現(xiàn)了3次
而最大值選取函數(shù)max中有一個參數(shù)key,表示選取最大值的依據(jù),例如
x = [-2,-1,0,1,2] def test(x): return x**2-2*x max(x,key=test) # -2
表示選出當函數(shù)test
值最大時的自變量。
根據(jù)這兩個特點,可以得到查找列表中出現(xiàn)次數(shù)最多元素的方法為
lst = [1,2,3,4,5,2,3,2,1,2,4] max(set(lst),key=lst.count) # 2
判斷重復元素
借助集合中元素不重復的特性,可以檢驗非集合數(shù)據(jù)中是否有重復數(shù)據(jù)。下面代碼種,set
可將列表轉(zhuǎn)換為集合,如果轉(zhuǎn)換之后元素個數(shù)不變,則說明列表中沒有重復元素。
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
。對于集合A
和B
而言,若想實現(xiàn)A-B
的功能,可采取A.difference(B)
的方案。
對于其他數(shù)據(jù)結(jié)構(gòu),可先轉(zhuǎn)為set
再行做差。且difference
會自動將輸入變量轉(zhuǎn)為set
。
A = [1,2,3] B = [1,2,4] list(set(A).difference(B)) # [3]
比較列表計算后的差異
現(xiàn)有一函數(shù)func
,對于兩組數(shù)據(jù)A
和B
,如果希望得到func(A)
和func(B)
的差別,也可以采用set
的特性。
def funcMinus(A, B, func): B = set(map(func, B)) #剔除func(B)中的重復元素 return [a for a in A if fn(a) not in B]
- 篩選數(shù)據(jù)
filter
是python的內(nèi)置函數(shù),用于過濾不符合條件的數(shù)據(jù)。list(filter(func,myList))
等價于[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中,對列表或者字符串采用:
進行索引,例如a:b
指的是從a到b的數(shù)據(jù);當采用雙引號::
時,引號間的值的意義就發(fā)生了變化,例如a:b:c
表示從a到b,間隔為c的數(shù)據(jù)。
據(jù)此,可以得到::-1
表示將字符串顛倒過來,據(jù)此可以判斷一個字符串是否為回文結(jié)構(gòu)
>>> s = "abcde" >>> s[::-1] 'edcba' >>> s == s[::-1] False
到此這篇關(guān)于Python十大列表操作技巧分享的文章就介紹到這了,更多相關(guān)Python列表操作技巧內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python利用高階函數(shù)實現(xiàn)剪枝函數(shù)
這篇文章主要為大家詳細介紹了python利用高階函數(shù)實現(xiàn)剪枝函數(shù)的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-03-03Python爬蟲之使用MongoDB存儲數(shù)據(jù)的實現(xiàn)
本文主要介紹了Python爬蟲之使用MongoDB存儲數(shù)據(jù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-06-06Python 實現(xiàn)購物商城,含有用戶入口和商家入口的示例
下面小編就為大家?guī)硪黄狿ython 實現(xiàn)購物商城,含有用戶入口和商家入口的示例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09