2016-09-29 140 views
0

我有一个列表的列表清单,我想列出的名单在同一项目添加到每个列表。我可以用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]] 
+1

你**不**与列表理解做到这一点:

在Python >= 3.5,这可以通过在文字列表拆包被美化。 – jonrsharpe

回答

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

太好了,谢谢你的解释。我对插入的理解存在根本性的差距。 – rafello

5

而不是使用insert的,你可以简单地添加的列表:

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

如前所述,insert改变列表就地返回None;这就是你填充你创建的列表的内容。要改变现有列表,而不是创建新的 -

ls = [['x', *i] for i in ls] 
相关问题