2011-01-09 47 views
2

鑑於若干名單:擴展幾個列表優雅

a = ["a1", "a2", "a3"] 
b = ["b1", "b2", "b3"] 
... 
n = ["n1", "n2", "n3"] 

和新值的列表:

new_vals = ["a4", "b4", "n4"] 

我想獲得:

["a1", "a2", "a3", "a4"] 
["b1", "b2", "b3", "b4"] 
... 
["n1", "n2", "n3", "n4"] 

我可以做到這一點當然,循環和臨時變量。好像來了zip,maplist.extend的組合應該更優雅地做,但是正在逃避我。

+0

這是否意味着您有14個列表和3個新值?你如何匹配新的值和原始列表?值是否始終以列表的變量名開頭? – 2011-01-09 19:29:47

回答

5

事情是這樣的:

a = ["a1", "a2", "a3"] 
b = ["b1", "b2", "b3"] 

# Put the list a, b ... in a big_list. 
big_list = [a, b] 

new_vals = ["a4", "b4", "n4"] 

for i, new_val in enumerate(new_vals): 
    big_list[i].append(new_val) 
+1

甚至更​​pythonic:第一行:`對於big_sublist,new_val在zip(big_list,new_vals):`和第二行:`big_sublist.append(new_val)` – eumiro 2011-01-09 20:24:09

2

假設你有一個列表的列表:

lsts = [ ['a1','a2','a3'], 
     ['b1','b2','b3'], 
     ['c1','c2','c3'] ] 

而且你要追加到每個列表的中端新值的列表lsts

lst = [ 'a4', 'b4', 'c4' ] 

然後你可以使用列表理解:

new_lsts = [l + [x] for l, x in zip(lsts, lst)] 
1

的地圖()取向溶液:

a = ["a1", "a2", "a3"] 
b = ["b1", "b2", "b3"] 
n = ["n1", "n2", "n3"] 
new_vals = ["a4", "b4", "n4"] 

map(lambda lst, x: lst.append(x), (a, b, n), new_vals) 

並且結合上面的列表建議列表:

lsts = [['a1','a2','a3'], 
     ['b1','b2','b3'], 
     ['c1','c2','c3']] 
new_vals = ["a4", "b4", "c4"] 
map(lambda lst, x: lst.append(x), lsts, new_vals) 

,因爲它在就地修改LSTS代替這可能是優選創建一個新的列表清單。

+0

確實很好,+1。最初令人驚訝的是,只需要忽略映射的結果,因爲append返回None。 – kriss 2011-01-10 00:25:14