如何用Python交替合并两个不等长列表?(优先列表推导式)
交替合并长度不一致的两个列表
给定两个列表:
list1 = ['A'] list2 = [1, 2, 3, 4]
尝试了如下列表推导式:
combination = [x for y in zip(list1, list2) for x in y] # 输出结果: ['A', 1]
但预期输出是:
['A', 1, 'A', 2, 'A', 3, 'A', 4]
解决方案(优先列表推导式)
方法1:借助itertools.cycle实现循环复用短列表
利用cycle可以无限循环迭代短列表元素的特性,和长列表配对后展开:
from itertools import cycle combination = [x for pair in zip(cycle(list1), list2) for x in pair] print(combination) # 输出:['A', 1, 'A', 2, 'A', 3, 'A', 4]
cycle(list1)会持续输出'A',直到list2的元素全部配对完成,最后通过嵌套推导式把每一对的元素依次放入结果列表。
方法2:不依赖标准库的实现
手动将短列表重复到和长列表相同长度,再进行配对展开:
combination = [x for pair in zip(list1 * len(list2), list2) for x in pair] print(combination) # 输出:['A', 1, 'A', 2, 'A', 3, 'A', 4]
list1 * len(list2)会把list1重复4次,生成['A', 'A', 'A', 'A'],之后和list2一一配对,再展开每一对元素得到目标结果。
内容的提问来源于stack exchange,提问作者user21060017
相关产品推荐
相关产品推荐

