2016-09-29 128 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]