2013-08-28 131 views
1

若干名單我已經定義像這樣空列表的一個空列表:追加到內部列表

lis_A = [[], [], []] 

,而我需要的,在我的代碼的某個時刻,追加值遞歸就像這樣:

lis_A[0].append(some_value0) 
lis_A[1].append(some_value1) 
lis_A[2].append(some_value2) 

,所以它看起來是這樣的:

print lis_A 
[[some_value0], [some_value1], [some_value2]] 

什麼是這樣做的Python的方式?

+0

這些值如何相關? 'some_Value0','some_Value1' ..? –

+2

他們是不相關的,並從其他一些過程中獲得。這是你的意思嗎? – Gabriel

+0

然後請顯示代碼。你如何獲得這些價值? –

回答

3
>>> lis_A = [[], [], []] 
>>> vals = [1,2,3] 
>>> [x.append(y) for x, y in zip(lis_A, vals)] 
>>> lis_A 
[[1], [2], [3]] 

或者,如果你想快速找到沒有副作用的環路,請使用:

from itertools import izip 

for x, y in izip(lis_A, vals): 
    x.append(y) 
+0

在這種情況下,列表理解不是一個好主意,您正在迭代_effect_的列表而不是_value_。這個證明是在第三行創建的'None'的中間列表被浪費了。首選使用簡單的'for' –

+0

@ÓscarLópez如果您想避免副作用並使用for循環,您應該使用:for x,y in izip(lis_A,vals):x.append(y)'。它比'enumerate'版本快50%。 –

2

試試這個:

lis_A = [[], [], []] 
to_append = [1, 2, 3] 

for i, e in enumerate(to_append): 
    lis_A[i].append(e) 

lis_A 
=> [[1], [2], [3]] 

如果有追加到每個子表不止一個元素,這將工作,只要在to_append列表與護理構造:

lis_A = [[], [], []] 
to_append = [1, 2, 3, 1, 2, 3] 

for i, e in enumerate(to_append): 
    lis_A[i % len(lis_A)].append(e) 

lis_A 
=> [[1, 1], [2, 2], [3, 3]] 
0

我會使用一個字典,而不是一個列表:

my_lists = {} 
for key, some_value in process_result(): 
    my_list = my_lists.get(key, []) 
    my_list.append(some_value) 
    my_lists[key] = my_list 

有可能是key一些值是有意義的,比其他0, 1, 2