Python - 迭代任何类型的列表结构

时间:2017-08-31 13:56:30

标签: python list ironpython

很抱歉,如果这已经得到了解答,我对python很新,我已经好好看看并找到了这个页面here这对我帮助了一点但是我#&# 39;我仍然坚持。

我试图在我的脚本中使用任何类型的输入,我已经让它适用于单个项目和项目列表,但我发现它很难获得它适用于列表列表。

我根据评论编辑了代码以使其更有意义:

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) TypeError:只能连接列表(不是" int")到列表

例如,如果输入= 1或输入= [1,2,3,4],则可行,但不适用于上述情况。

我希望输出看起来像下面的列表列表:

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

我首先尝试从嵌套列表中创建一个平面列表,但我想保留输出的列表结构。

感谢大家的阅读,

TJ

1 个答案:

答案 0 :(得分: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]]