最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python十大列表操作技巧分享

 更新時間:2024年01月28日 11:49:29   作者:微小冷  
這篇文章給大家介紹了Python十大列表操作技巧分享,列表展開,降維,分塊,轉(zhuǎn)置,查找眾數(shù),判斷重復(fù)元素等十個操作技巧,并通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下

列表展開

對于形如 [ 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ù)均為列表時,可以通過單星號索引之后,用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ù),可以遍歷列表并對每個元素進(jìn)行映射。對于list(map(func,myList)),等價于[func(e) for e in myList]。根據(jù)這個特性,可以對列表進(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ù)組中對應(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

表示選出當(dāng)函數(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

判斷重復(fù)元素

借助集合中元素不重復(fù)的特性,可以檢驗非集合數(shù)據(jù)中是否有重復(fù)數(shù)據(jù)。下面代碼種,set可將列表轉(zhuǎn)換為集合,如果轉(zhuǎn)換之后元素個數(shù)不變,則說明列表中沒有重復(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。對于集合AB而言,若想實現(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ù)AB,如果希望得到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ù),用于過濾不符合條件的數(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中,對列表或者字符串采用:進(jìn)行索引,例如a:b指的是從a到b的數(shù)據(jù);當(dāng)采用雙引號::時,引號間的值的意義就發(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)文章

最新評論

奉化市| 萨迦县| 乐都县| 海宁市| 舞钢市| 东山县| 长白| 阜康市| 乐陵市| 花莲市| 曲周县| 焉耆| 枣庄市| 澎湖县| 延吉市| 隆安县| 衡阳市| 临武县| 滨海县| 阳高县| 陕西省| 石棉县| 大埔县| 中卫市| 昌江| 开封县| 栖霞市| 谢通门县| 安徽省| 安溪县| 沐川县| 林芝县| 静安区| 定日县| 青神县| 禹州市| 内乡县| 涡阳县| 曲靖市| 峡江县| 黑河市|