前一段去雲英面試,技術官很」不厚道「了問了乙個非常簡單的問題:如何將多維列程式設計客棧表轉化了一維的?當時雖然想到dwyupmal了使用迭代或者列表生成式可以做到,但是可以沒能可行的**,回來後一頓後悔。
對於規範的且巢狀維度較低的多維列表,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 expa程式設計客棧nd_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
[1, 2, 3, 4, 5, 6,7,8,9]
其實上邊列舉的方法僅僅是冰山一角,大海下的冰山就等這童鞋們自行去尋找挖掘了。
本文標題: python巢狀列表轉一維的方法(壓平巢狀列表)
本文位址:
Python巢狀列表轉一維(壓平巢狀列表)
前一段去雲英面試,技術官很 不厚道 了問了乙個非常簡單的問題 如何將多維列表轉化了一維的?當時雖然想到了使用迭代或者列表生成式可以做到,但是可以沒能可行的 回來後一頓後悔。對於規範的且巢狀維度較低的多維列表,python中有很多方法可以實現 a 1,2 3,4 5,6 print j for i i...
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 ...
python巢狀的列表儲存
簡單列表迴圈清楚了,但是巢狀的列表儲存會有點矇圈,記錄下 方式一 呼叫方法時輸出print,方法是直接return輸出資訊 def get grade student score,name for student in student score if student 1 name try grad...