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

时间:2017-09-16 02:22:02

标签: 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]]

我想使用列表推导,因为我不希望通过迭代主列表中的每个内部列表以正常方式执行它,然后使用临时列表添加到它。

任何帮助?

5 个答案:

答案 0 :(得分:3)

您可以使用列表添加来完成此操作:

[l + [90] for l in lists]

答案 1 :(得分:1)

<强>途径

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

lsts = [[1,345,0,304], [0,345,678,946,90], [0,23,3,56,3,5,9,0]]
[lst + [90] for lst in lsts]

或者,itertools.chain

import itertools as it

[list(it.chain(lst, [90])) for lst in lsts]

为了好玩,第三方库more-itertoolspip install more_itertools):

import more_itertools as mit

[list(mit.padded(lst, fillvalue=90, n=len(lst)+1)) for lst in lsts]

<强>买者

某些答案尝试在迭代时改变列表。虽然这些选项可以提供相同的结果,但可能更高的内存效率,甚至对于这个特定问题的大数据更快,它们可以说是非pythonic而不是推荐的实践。

来自Python docs

  

有时候在循环播放列表时更改列表很有诱惑力;但是,改为创建新列表通常更简单,更安全。

在迭代时列表中的removinginserting元素尤其如此。后一种方法采用创建新列表的惯例。但是,对于某些无关紧要的circumstances,折衷方案可能是迭代嵌套列表的副本:

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的方法,这是此处讨论的下一个性能选项。

答案 2 :(得分:0)

这也有效

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)
  

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

答案 3 :(得分:0)

另一个选择

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]]

答案 4 :(得分:0)

还有一个:

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