如何重複另一個列表內容中的列表元素,直到第二個列表的長度滿足爲止? 例如:Python如何在另一個列表內容中重複列表的元素,直到第二個列表的長度滿足爲止?
LA = [0,1,2]
LB = [(0,0),(1,0),(2,0),(3,0),(4,0),(5,0),(6,0)]
the end result should be:
LC = [(0,0,0),(1,0,1),(2,0,2),(3,0,0),(4,0,1),(5,0,2),(6,0,0)]
希望它可以在一個行完成
如何重複另一個列表內容中的列表元素,直到第二個列表的長度滿足爲止? 例如:Python如何在另一個列表內容中重複列表的元素,直到第二個列表的長度滿足爲止?
LA = [0,1,2]
LB = [(0,0),(1,0),(2,0),(3,0),(4,0),(5,0),(6,0)]
the end result should be:
LC = [(0,0,0),(1,0,1),(2,0,2),(3,0,0),(4,0,1),(5,0,2),(6,0,0)]
希望它可以在一個行完成
您可以使用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
用完爲止。
嘗試enumerate()
像這樣用列表解析一起 -
[elem + (LA[i % len(LA)],) for i, elem in enumerate(LB)]
#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]]
這裏有一個更「明確」的版本,適用於任何長度的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)]
['itertools.cycle()'](https://docs.python.org/2/library/itertools.html#itertools.cycle),因爲你打我吧:) – TemporalWolf
這個工作,謝謝摩西對我需要的額外解釋。 –