我有一个列表列表,我想将相同的项目添加到列表列表中的每个列表中。我可以使用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]]
答案 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]]