2013-08-28 41 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