2017-08-31 87 views
3

很抱歉,如果這已經回答了,我很新的蟒蛇,我有我做一件事,並已找到了這個網頁here已經幫我一點點,但我仍然卡住了。Python的 - 任何類型的表結構的迭代

我試圖讓任何類型的輸入,在我的腳本工作,我找到了工作單個項目和項目的名單,但我發現很難得到它的工作名單清單。

我編輯的代碼,每個註釋,使一些更有意義:

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

if isinstance(Input, list): 
    Input = Input 
else: 
    Input = [Input] 

listout = [] 


for x in Input: 
    listout.append(x+2) 

print (listout) 

回報:第12行,在 listout.append(x + 2) 類型錯誤:只能級聯列表(不是「int」)列表

這適用於如果輸入= 1或輸入= [1,2,3,4]爲例,但不適用於上述。

我想輸出看起來像下面列出的清單:

[[3,4,5],[6,7,8],[9,10,11]] 

我試圖做一個平面列表出來的嵌套列表的第一個,但我想保持鏈表結構爲輸出。

感謝所有的閱讀,

TJ

+0

拼合與列表理解 – Mangohero1

+0

名單,也許你可以使用預先定義的'輸入而不是爲此使用一些圖書館。也許只是'Input = 1','Input = [1,2,3]'等等,然後根據這些解釋什麼不起作用(或者你想要什麼)。 – MSeifert

+1

我建議避免編寫試圖首先處理非均勻輸入的代碼。它會導致難看的代碼。 – wim

回答

2

你可能會考慮numpy

>>> import numpy as np 
>>> a=np.array([[1,2,3],[4,5,6],[7,8,9]]) 
>>> a 
array([[1, 2, 3], 
     [4, 5, 6], 
     [7, 8, 9]]) 
>>> a+=2 
>>> a 
array([[ 3, 4, 5], 
     [ 6, 7, 8], 
     [ 9, 10, 11]]) 
>>> a.tolist() 
[[3, 4, 5], [6, 7, 8], [9, 10, 11]] 

如果您不能使用numpy的,你需要編寫任意嵌套遞歸過程:

def nested_sum(e,n): 
    if isinstance(e, list): 
     return [nested_sum(x, n) for x in e] 
    else: 
     return e+n  

>>> nested_sum([1,[2,3],[4,5,6],[7,[8],9]], 2) 
[3, [4, 5], [6, 7, 8], [9, [10], 11]] 

如果你只是有兩個嵌套層次(如您在本例中有),你可以做一個列表理解:

>>> li=[[1,2,3],[4,5,6],[7,8,9]] 
>>> [[e+2 for e in sl] for sl in li] 
[[3, 4, 5], [6, 7, 8], [9, 10, 11]] 
+1

感謝這樣做的工作,但我在使用一個基於.NET的IronPython實現,因此它不支持numpy的(據我所知)一個程序使用此。 – TJames

+1

已更新。嘗試遞歸或列表理解。 – dawg

+1

乾杯@dawg你是一個明星,nested_sum定義正是我一直在尋找。 – TJames