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

これはinsertは、インプレースですので、私はちょうど(それはそれは時と呼ばれ、Noneを返しているリストを変更)

[[None], [None], [None]] 
+1

あなたは** **リスト内包でそれをしない - あなたは、既存のリストを変更したい、新しいものを作成しません。 – jonrsharpe

答えて

3

を取得

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

を動作しません。

あなたlsに再割り当てそれなし)[[i.insert(0, 'x')] for i in 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を返すには、場所リストを変えます。これはあなたが作成しているリストにあなたが入れているものです。 Pythonの>= 3.5

これは文字通りのリストにアンパックで清書することができます。

ls = [['x', *i] for i in ls] 
関連する問題