2011-06-21 59 views
2

的名單上有列出的清單,說:處理列表

arr = [[1, 2], [1, 3], [1, 4]] 

我想追加100到每個內部列表。對於上面的例子輸出爲:

arr = [[1, 2, 100], [1, 3, 100], [1, 4, 100]] 

我當然可以這樣做:

for elem in arr: 
     elem.append(100) 

但有一些更Python可以做?爲什麼下面不起作用:

arr = [elem.append(100) for elem in arr] 

回答

3

注意,你的代碼也可以運行 - 你必須知道的唯一的事情是,有沒有必要在這樣的情況下,結果賦給變量:

arr = [[1, 2], [1, 3], [1, 4]] 
[x.append(100) for x in arr] 

後執行改編將包含更新列表[ 1,2,100],[1,3,100],[1,4,100]],例如,它就像就地更新一樣工作,但這不是很常見的做法。

同樣的結果,你會在接下來的情況下得到:

map(lambda x: x.append(100), arr) 

正如討論,您可以使用列表理解或地圖的任何變量分配結果要做到這一點:

res = map(lambda x: x + [100], arr) 
+0

啊......謝謝你建議修改我的代碼。 –

+0

前兩個不是慣用的,第二個甚至不能在Python 3中工作。 – delnan

+0

對不起,如果是這樣,但我通知OP關於前兩種情況。第三個沒有在python 3中測試過,因爲我從來沒有用過它。謝謝你通知我這件事。 –

5

第二個版本應該寫成像arr = [elem + [100] for elem in arr]。但是,如果你問我是第一次,那麼最pythonic的方式。 for構造有它自己的用途,在這裏很適合。

+1

它也會創建列表的副本... –

1

你可以做

[a + [100] for a in arr] 

之所以你append不起作用的是,append不返回列表,而是None

當然,這比僅僅做append需要更多的資源 - 你最終會複製一切。

+0

感謝您指出爲什麼我的示例中的附錄不起作用。 –

1

這是更pythonic的方式

for elem in arr: 
    elem.append(100) 

但作爲一個選項,你也可以試試這個:

[arr[i].append(100) for i in range(len(arr))] 
print arr # It will return [[1, 2, 100], [1, 3, 100], [1, 4, 100]]