Python巢狀列表轉一維(壓平巢狀列表)

2021-08-02 13:16:14 字數 1271 閱讀 6220

前一段去雲英面試,技術官很」不厚道「了問了乙個非常簡單的問題:如何將多維列表轉化了一維的?當時雖然想到了使用迭代或者列表生成式可以做到,但是可以沒能可行的**,回來後一頓後悔。

對於規範的且巢狀維度較低的多維列表,python中有很多方法可以實現:

a=[[1,2],[3,4],[5,6]]

print [j for i in li for j in i]

#orfrom itertools import chain

print list(chain(*a))

#orimport itertools

a = [[1,2,3],[4,5,6], [7], [8,9]]

out = list(itertools.chain.from_iterable(a))

#ora=[[1,2],[3,4],[5,6]]

t=[t.extend(i) for i in a]

print t

#ora=[[1,2],[3,4],[5,6]]

print sum(a,)

#orreduce(lambda x, y: x+ y, a)

對於複雜的多維巢狀列表就需要使用一些複雜的方法:

#遞迴的方法比較容易理解

def expand_list(nested_list):

for item in nested_list:

if isinstance(item, (list, tuple)):

for sub_item in expand_list(item):

yield sub_item

else:

yield item

#在stackoverflow看到大牛的列表生成式版本

func = lambda x: [y for l in x for y in func(l)] if type(x) is list else [x]

#生成式的方法還有很多,可以自行摸索

對於使用python2.x的童鞋,還可以使用flatten函式來做:

>>> d=[1,2,3,[4,5],[6,7,[8,9]]]

>>>from compiler.ast import flatten

>>>flatten(a)

[1, 2, 3, 4, 5, 6,7,8,9]

其實上邊列舉的方法僅僅是冰山一角,大海下的冰山就等這童鞋們自行去尋找挖掘了。

Python巢狀列表轉一維的方法 壓平巢狀列表

前一段去雲英面試,技術官很 不厚道 了問了乙個非常簡單的問題 如何將多維列程式設計客棧表轉化了一維的?當時雖然想到dwyupmal了使用迭代或者列表生成式可以做到,但是可以沒能可行的 回來後一頓後悔。對於規範的且巢狀維度較低的多維列表,python中有很多方法可以實現 a 1,2 3,4 5,6 p...

python 多維列表(巢狀列表)

python 多維列表 巢狀列表 姓名,年齡,工資 姓名,年齡,工資 姓名,年齡,工資 字串 姓名,年齡,工資 例如 張三,30,2000 str 張三,30,2000 l str.split print l emp list 單個人的資訊 info input 請輸入員工資訊 info list ...

python巢狀列表實現矩陣轉置的理解

code 對矩陣進行轉置 matrix 1,2,3,4 5,6,7,8 9,10,11,12 transposed row i for row in matrix for i in range 4 列表解析先從外層開始,即 for i in range 4 i首先取0,再到內層 row i for ...