2015-02-11 35 views
0

对不起,这可能很简单,但我想不出一种办法。我有这样的列表:python - 转发迭代/元组扩展列表

L = [('a', [[0],[1]]), ('b', [[2],[3]]), ('c', [[4],[5]])] 

我想迭代L,向前扩展每个元组中的第二项。这将给:

L = [('a', [[0],[1]]), ('b', [[0], [1], [2],[3]]), ('c', [[0], [1], [2],[3], [4],[5]])] 

我想不出一个办法。有人可以帮忙吗? 感谢

回答

1

试试这个:

如果
L = [('a', [[0],[1]]), ('b', [[2],[3]]), ('c', [[4],[5]])] 
prev = [] 
for i,el in enumerate(L): 
    el_new = (el[0], prev + el[1]) 
    prev += el[1] 
    L[i] = el_new 
+0

@jaydh,这个比较粗略的时间vs类似的代码,你可以尝试在代码之前/之后调用time.time()并打印差异。查看[这篇文章](http://stackoverflow.com/questions/7370801/measure-time-elapsed-in-python)为例。 – sharshofski 2015-02-11 18:00:21

2

不知道这是你如何想要它做,但是这将做的工作:

sum = [] 
for i,item in enumerate(L): 
    sum += item[1] 
    L[i] = (item[0], sum[:]) 
+0

谢谢。我不太擅长python,我需要在一个巨大的列表中运行它。你知道你的答案和sharshofski's更有效吗? – jaydh 2015-02-11 17:19:18

0

调用此函数列表:

def extend(list): 
    a = [] 
    extended_list = [] 
    for i in list: 
     a += i[1] 
     i = (i[0], a[:]) 
     extended_list.append(i) 
    return extended_list