如何重复其他列表内容中的列表元素,直到满足第二个列表的长度为止? 例如:
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)]
希望可以在一行中完成
答案 0 :(得分: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 :(得分:0)
尝试这样的enumerate()
以及列表理解 -
[elem + (LA[i % len(LA)],) for i, elem in enumerate(LB)]
答案 2 :(得分:0)
这里有一个更明确的"适用于任何长度的洛杉矶的版本。
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)]