Python 处理列表列表

Python 处理列表列表,python,Python,我有一个列表,比如: arr = [[1, 2], [1, 3], [1, 4]] 我想在每个内部列表中添加100个。上述示例的输出为: arr = [[1, 2, 100], [1, 3, 100], [1, 4, 100]] 我当然可以做到: for elem in arr: elem.append(100) 但是,还有什么更像蟒蛇的方法可以做到吗?为什么以下方法不起作用: arr = [elem.append(100) for elem

我有一个列表,比如:

    arr = [[1, 2], [1, 3], [1, 4]]
我想在每个内部列表中添加100个。上述示例的输出为:

    arr = [[1, 2, 100], [1, 3, 100], [1, 4, 100]]
我当然可以做到:

    for elem in arr:
        elem.append(100)
但是,还有什么更像蟒蛇的方法可以做到吗?为什么以下方法不起作用:

    arr = [elem.append(100) for elem in arr]

第二个版本的编写应类似于
arr=[elem+[100]for elem in arr]
。但如果你问我,最具蟒蛇风格的方式是第一种。
for
构造有自己的用途,非常适合这里。

您可以这样做

[a + [100] for a in arr]
append
不起作用的原因是
append
不返回列表,而是
None


当然,这比仅仅执行
追加
要耗费更多的资源-您最终会复制所有内容。

请注意,您的代码也可以工作-您需要知道的唯一一件事是,在这种情况下,不需要将结果赋给变量:

arr = [[1, 2], [1, 3], [1, 4]]
[x.append(100) for x in arr]
执行后,arr将包含更新的列表[[1,2100]、[1,3100]、[1,4100]],例如,它可以像就地更新一样工作,但这不是很常见的做法

在下一种情况下,您将得到相同的结果:

map(lambda x: x.append(100), arr)
如前所述,您可以使用列表理解或映射将结果分配给任何变量:

res = map(lambda x: x + [100], arr)

这是一种更像蟒蛇的方式

 for elem in arr:
     elem.append(100)
但作为一种选择,您也可以尝试以下方法:

[arr[i].append(100) for i in range(len(arr))]
print arr # It will return [[1, 2, 100], [1, 3, 100], [1, 4, 100]]

感谢您指出我的示例中的append不起作用的原因。前两个不是惯用的,第二个在Python 3中甚至不起作用。如果是这样,很抱歉,但我已将前两种情况通知了OP。第三个没有在Python3中测试,因为我从未使用过它。谢谢你通知我这件事。