如何压缩两个大小不同的列表?

2024-06-28 19:18:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我想压缩两个不同长度的列表

例如

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

我期待着

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

但是内置的zip不会重复与较大的列表配对。 是否有任何内置方式可以实现这一点? 谢谢

这是我的密码

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

Tags: in密码列表forlenifvalue方式
3条回答

对称,无条件一行

[*zip(A*(len(B)//len(A) + 1), B*(len(A)//len(B) + 1))]

哪个严格地回答了“如何压缩两个大小不同的列表?”

需要一个相同大小列表的修补程序作为常规:

[*(zip(A, B) if len(A) == len(B)
         else zip(A*(len(B)//len(A) + 1),
                  B*(len(A)//len(B) + 1)))]

您可以使用^{}

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.

示例:

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)

试试这个。

A = [1,2,3,4,5,6,7,8,9]
B = ["A","B","C"]
Z = []
for i, a in enumerate(A):
    Z.append((a, B[i % len(B)]))

只需确保较大的列表在A中。

相关问题 更多 >