2017-05-05 55 views

回答

8

您可以使用itertools.cycle

from itertools import cycle 

LA = [0,1,2] 
LB = [(0,0),(1,0),(2,0),(3,0),(4,0),(5,0),(6,0)] 

LC = [(i, j, k) for (i, j), k in zip(LB, cycle(LA))] 
print LC 
# [(0, 0, 0), (1, 0, 1), (2, 0, 2), (3, 0, 0), (4, 0, 1), (5, 0, 2), (6, 0, 0)] 

这是可行的,因为zip生成物品,直到其中一个迭代耗尽...但一个cycle对象是取之不尽的,所以我们将继续从LA填充物品,直到LB用完为止。

+1

['itertools.cycle()'](https://docs.python.org/2/library/itertools.html#itertools.cycle),因为你打我吧:) – TemporalWolf

+1

这个工作,谢谢摩西对我需要的额外解释。 –

0

尝试enumerate()像这样用列表解析一起 -

[elem + (LA[i % len(LA)],) for i, elem in enumerate(LB)] 
0
#use list comprehension and get the element from LA by using the index from LB %3. 
[v+(LA[k%3],) for k,v in enumerate(LB)] 
Out[718]: [[0, 0, 0], [1, 0, 1], [2, 0, 2], [3, 0, 0], [4, 0, 1], [5, 0, 2], [6, 0, 0]] 
0

这里有一个更“明确”的版本,适用于任何长度的LA。

LA = [0,1,2] 
LB = [(0,0),(1,0),(2,0),(3,0),(4,0),(5,0),(6,0)] 

i = 0 
LC = [] 
for x,y in LB: 
    try: 
     z = LA[i] 
    except IndexError: 
     i = 0 
     z = LA[i] 
    LC.append((x,y,z)) 
    i += 1 

print LC 
[(0, 0, 0), (1, 0, 1), (2, 0, 2), (3, 0, 0), (4, 0, 1), (5, 0, 2), (6, 0, 0)] 
相关问题