2017-08-31 89 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