我有一个列表如下:
[[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]]
我想使用列表推导,因为我不希望通过迭代主列表中的每个内部列表以正常方式执行它,然后使用临时列表添加到它。
任何帮助?
答案 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-itertools
(pip 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:
有时候在循环播放列表时更改列表很有诱惑力;但是,改为创建新列表通常更简单,更安全。
在迭代时列表中的removing或inserting元素尤其如此。后一种方法采用创建新列表的惯例。但是,对于某些无关紧要的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