列表理解将项目添加到列表列表中的每个列表

时间:2016-09-29 11:46:28

标签: python list python-3.x

我有一个列表列表,我想将相同的项目添加到列表列表中的每个列表中。我可以使用for循环执行此操作,但我想知道如何使用列表解析来执行此操作。

ls = [[1,2,3],[4,5,6],[7,8,9]] 

for i in ls:
    i.insert(0, 'x')

ls
[['x',1,2,3],['x',4,5,6],['x',7,8,9]]

这不起作用

ls = [[i.insert(0, 'x')] for i in ls]

我得到了

[[None], [None], [None]]

2 个答案:

答案 0 :(得分:5)

您可以直接添加列表,而不是使用insert

ls = [['x'] + i for i in ls]
[['x', 1, 2, 3], ['x', 4, 5, 6], ['x', 7, 8, 9]]

如上所述,insert改变列表就地返回None;这就是您填充列表的内容。

在Python >= 3.5中,可以通过在列表文字中解压缩来解决这个问题:

ls = [['x', *i] for i in ls]

答案 1 :(得分:3)

因为insert就位(它修改了列表,它会被调用并返回None)。

可以[[i.insert(0, 'x')] for i in ls](无需将其重新分配给ls),但显式循环具有更好的可读性,并且没有"魔法"副作用。

ls = [[1,2,3],[4,5,6],[7,8,9]]
[[i.insert(0, 'x')] for i in ls]
print(ls)
>> [['x', 1, 2, 3], ['x', 4, 5, 6], ['x', 7, 8, 9]]