Python - 迭代任何类型的列表结构
Python - Iterating of any type of list structure
抱歉,如果这个问题已经得到解答,我是 python 的新手,我仔细浏览了一下,找到了这个页面 here,它对我有一点帮助,但是我还是卡住了。
我正在尝试让任何类型的输入在我的脚本中工作,我已经让它为单个项目和项目列表工作,但我发现很难让它为列表列表。
我已经根据评论编辑了代码以使其更有意义:
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)
returns:第 12 行,在
listout.append(x+2)
类型错误:只能将列表(不是 "int")连接到列表
例如,如果 Input = 1 或 Input = [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]]
抱歉,如果这个问题已经得到解答,我是 python 的新手,我仔细浏览了一下,找到了这个页面 here,它对我有一点帮助,但是我还是卡住了。
我正在尝试让任何类型的输入在我的脚本中工作,我已经让它为单个项目和项目列表工作,但我发现很难让它为列表列表。
我已经根据评论编辑了代码以使其更有意义:
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)
returns:第 12 行,在 listout.append(x+2) 类型错误:只能将列表(不是 "int")连接到列表
例如,如果 Input = 1 或 Input = [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]]