l=[1,[1,[1,[1,[1]]]]]
如何使用任何內置函數將n維列表轉換爲單維列表python wothout?
如何上面n
維度列表爲單一尺寸列表轉換,而無需使用任何內置的功能。我在這裏尋找邏輯。
輸出應爲[1,1,1,1,1]
請幫我在這
l=[1,[1,[1,[1,[1]]]]]
如何使用任何內置函數將n維列表轉換爲單維列表python wothout?
如何上面n
維度列表爲單一尺寸列表轉換,而無需使用任何內置的功能。我在這裏尋找邏輯。
輸出應爲[1,1,1,1,1]
請幫我在這
使用遞歸函數:
In [20]: def ravel(lst):
for i in lst:
if isinstance(i, list): #use 'type(i) is list' if you don't want built-in functions
yield from ravel(i)
else:
yield i
....:
In [21]: list(ravel(l))
Out[21]: [1, 1, 1, 1, 1]
你可以舒展的使用嘗試和除了爲了完成這個沒有isinstance
In [44]: def flatten(l, r):
...: for i in l:
...: try:
...: i.count
...: flatten(i, r)
...: except:
...: r.append(i)
In [46]: l=[1,[1,[1,[1,[1]]]]]
In [47]: r = []
In [48]: flatten(l,r)
In [49]: r
Out[49]: [1, 1, 1, 1, 1]
下面是不使用任何內置函數Python 2裏的解決方案。
與其他解決方案一樣,我們使用遞歸。如果當前項目是一個列表,我們就會把它列入其中,從而產生先前遞歸級別的任何解決方案。否則,我們只是產生該項目。
def flatten(seq):
for u in seq:
try:
for v in flatten(u):
yield v
except TypeError:
yield u
l = [1, [2, [3, [4, [5]]]]]
flat = [u for u in flatten(l)]
print flat
輸出
[1, 2, 3, 4, 5]
當然,使用Python沒有任何的其內置的功能是愚蠢的,除非它是一個編程的難題。明智的辦法做到這一點是:
def flatten(seq):
for u in seq:
if isinstance(u, list):
for v in flatten(u):
yield v
else:
yield u
l = [1, [2, [3, [4, [5]]]]]
flat = list(flatten(l))
在Python 3,你可以使用yield from
語法,如圖Kasramvd的答案。
def flatten(seq):
for u in seq:
if isinstance(u, list):
yield from flatten(u)
else:
yield u
l = [1, [2, [3, [4, [5]]]]]
flat = list(flatten(l))
print(flat)
[轉換多維列表到1D列表在Python](可能的複製http://stackoverflow.com/questions/2961983/convert-multi-dimensional-list-to-a-1d-list在python) – direprobs
這是一種代碼高爾夫 – maxkoryukov
direprobs鏈接中的任何答案都可以幫助你嗎?這聽起來像是作業,所以你真的應該告訴我們你試過的東西。不使用內置函數做這件事並不容易。是否允許像'isinstance','type'或'len'這樣的函數?怎麼樣的列表方法像'.append'或'.extend'? –