2017-04-18 45 views
-5

l=[1,[1,[1,[1,[1]]]]]如何使用任何內置函數將n維列表轉換爲單維列表python wothout?

如何上面n維度列表爲單一尺寸列表轉換,而無需使用任何內置的功能。我在這裏尋找邏輯。

輸出應爲[1,1,1,1,1]

請幫我在這

+0

[轉換多維列表到1D列表在Python](可能的複製http://stackoverflow.com/questions/2961983/convert-multi-dimensional-list-to-a-1d-list在python) – direprobs

+1

這是一種代碼高爾夫 – maxkoryukov

+1

direprobs鏈接中的任何答案都可以幫助你嗎?這聽起來像是作業,所以你真的應該告訴我們你試過的東西。不使用內置函數做這件事並不容易。是否允許像'isinstance','type'或'len'這樣的函數?怎麼樣的列表方法像'.append'或'.extend'? –

回答

1

試試這個,

l = [1,[1,[1,[1,[1]]]]] 
def getAsList(l): 
    r =[] 
    for i in l: 
     if type(i) == list: 
      r.extend(getAsList(i)) 
     else: 
      r.append(i) 
    return r 


print getAsList(l) 
+2

不要使用'=='進行類型驗證。而是使用'is'。 – Kasramvd

+2

你可以替換,如果輸入(i)==列表if isinstance(i,list) – decadenza

2

使用遞歸函數:

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] 
+0

'isinstance'是內置的... –

+0

@ juanpa.arrivillaga是的,只是更新;) – Kasramvd

+0

'''也是一個內置的;) –

0

你可以舒展的使用嘗試和除了爲了完成這個沒有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] 
2

下面是不使用任何內置函數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) 
相關問題