Answer a question

I want to zip two list with different length

for example

A = [1,2,3,4,5,6,7,8,9]
B = ["A","B","C"]

and I expect this

[(1, 'A'), (2, 'B'), (3, 'C'), (4, 'A'), (5, 'B'), (6, 'C'), (7, 'A'), (8, 'B'), (9, 'C')]

But the built-in zip won't repeat to pair with the list with larger size. Does there exist any built-in way can achieve this?

Here is my code:

idx = 0
zip_list = []
for value in larger:
    zip_list.append((value,smaller[idx]))
    idx += 1
    if idx == len(smaller):
        idx = 0

Answers

You can use itertools.cycle:

Make an iterator returning elements from the iterable and saving a copy of each. When the iterable is exhausted, return elements from the saved copy. Repeats indefinitely.

Example:

A = [1,2,3,4,5,6,7,8,9]
B = ["A","B","C"]

from itertools import cycle
zip_list = zip(A, cycle(B)) if len(A) > len(B) else zip(cycle(A), B)
Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐