Python的 - 任何类型的表结构的迭代
问题描述:
很抱歉,如果这已经回答了,我很新的蟒蛇,我有我做一件事,并已找到了这个网页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
答
你可能会考虑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]]
拼合与列表理解 – Mangohero1
名单,也许你可以使用预先定义的'输入而不是为此使用一些图书馆。也许只是'Input = 1','Input = [1,2,3]'等等,然后根据这些解释什么不起作用(或者你想要什么)。 – MSeifert
我建议避免编写试图首先处理非均匀输入的代码。它会导致难看的代码。 – wim