Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中的每个内部列表的末尾添加新元素_Python - Fatal编程技术网

在Python中的每个内部列表的末尾添加新元素

在Python中的每个内部列表的末尾添加新元素,python,Python,我有一个列表,如下所示: [[1,345,0,304],[0,345,678,946,90],[0,23,3,56,3,5,9,0]] 现在我想在每个内部列表的末尾添加一个新的编号(相同的编号) 所以结果应该是这样的: [[1,345,0,304,90],[0,345,678,946,90,90],[0,23,3,56,3,5,9,0,90]] 我想使用列表理解,因为我不想通过迭代主列表中的每个内部列表,然后使用临时列表来添加到主列表中的正常方式 有什么帮助吗?您可以使用“列表添加”来完成以

我有一个列表,如下所示:

[[1,345,0,304],[0,345,678,946,90],[0,23,3,56,3,5,9,0]]
现在我想在每个内部列表的末尾添加一个新的编号(相同的编号)

所以结果应该是这样的:

[[1,345,0,304,90],[0,345,678,946,90,90],[0,23,3,56,3,5,9,0,90]]
我想使用列表理解,因为我不想通过迭代主列表中的每个内部列表,然后使用临时列表来添加到主列表中的正常方式


有什么帮助吗?

您可以使用“列表添加”来完成以下操作:

[l + [90] for l in lists]

接近

本机Python(@acushner首先介绍了这一点):

或者,与:

为了好玩,第三方库(
pip安装更多工具)
):


警告

有些答案试图在迭代时改变列表。虽然对于这个特定的问题,这些选项给出了相同的结果,可能更节省内存,甚至可能更快地处理更大的数据,但它们可以说是非pythonic的,也不推荐使用

从:

有时,当你在一个列表上循环时,很容易改变它;但是,创建一个新列表通常更简单、更安全

当在迭代列表时从列表中删除或删除元素时,尤其如此。后一种方法采用创建新列表的惯例。但是,对于某些无害的情况,折衷方法可能是迭代嵌套列表的副本:

lists = [[1,345,0,304], [0,345,678,946,90], [0,23,3,56,3,5,9,0]]
for lst in lists[:]:
    lst.append(90)
lists
否则,默认为@acushner的方法,这是本文讨论的下一个性能选项。

这也适用

lists = [[1,345,0,304],[0,345,678,946,90],[0,23,3,56,3,5,9,0]]
[l.append(90) for l in lists]
print(lists)
[12345,0304,90],[0345678946,90,90],[0,23,3,56,3, 5,9,0,90]]

另一种选择

lists = [[1,345,0,304], [0,345,678,946,90], [0,23,3,56,3,5,9,0]]

for lst in lists:
    lst.append(90)

print lists
[[1, 345, 0, 304, 90],[0, 345, 678, 946, 90, 90],[0, 23, 3, 56, 3, 5, 9, 0, 90]]
还有一个:

lists = [[1,345,0,304],[0,345,678,946,90],[0,23,3,56,3,5,9,0]]
for _ in map(lambda x: x.append(90), lists):
    pass

这种解决方案是最好的,因为它改变了数据结构,而不是创建新的数据结构。也就是说,这不是你应该如何使用列表理解。这个问题最好用for-loop来回答。你能解释一下为什么不能使用列表理解吗?@Serjik这是不正确的。因为append返回,所以它不起作用None@Baktaawar它绝对有效,只需打印结果,因为append不返回value@Arya麦卡锡:你的评论最好,为什么其他任何答案都会得到一张赞成票,而我会得到一张反对票???这是非常浪费的,因为它会创建列表的副本。事实上,它并没有附加每个列表。它创建了全新的列表。想象一下一个1000×1000列表的渐近情况,没有复制。将创建新列表。这是Python中列表理解的一个常见约定。你有什么建议吗?这是非常浪费的,因为它会创建列表的副本。事实上,它并没有附加每个列表。它创建了全新的列表。想象一下一个1000×1000的列表的渐进情况。@Aryamcarthy是的,这是浪费,但如果你读了OP的问题,那就是他/她想要的。你可以通过澄清你的意图来改进这个问题。您声称希望使用列表理解将其附加到每个列表,但您选择了一个创建副本的答案,将其附加到这些列表而不是您提到的列表。如果这是你想要的,请编辑你的问题,让它变得清楚。同样为了清楚起见,我将交换
lst
列表的名称。否则,这是一个很好的答案。改变你正在迭代的同一个列表不是一个最佳实践。在这种情况下,它是无害的,因为您没有删除项目,但更安全的习惯是迭代副本,例如
列表[:]
。这类帖子有好几个。只需将列表中的lst替换为
。[:]:
@pylang他不是要求重复一个副本,我是在建议一个习语来改进你的答案。更多信息请参见我发布的cavaet。谢谢你的帖子。
lists = [[1,345,0,304],[0,345,678,946,90],[0,23,3,56,3,5,9,0]]
[l.append(90) for l in lists]
print(lists)
lists = [[1,345,0,304], [0,345,678,946,90], [0,23,3,56,3,5,9,0]]

for lst in lists:
    lst.append(90)

print lists
[[1, 345, 0, 304, 90],[0, 345, 678, 946, 90, 90],[0, 23, 3, 56, 3, 5, 9, 0, 90]]
lists = [[1,345,0,304],[0,345,678,946,90],[0,23,3,56,3,5,9,0]]
for _ in map(lambda x: x.append(90), lists):
    pass