【问题标题】:adding list of different lengths together将不同长度的列表添加在一起
【发布时间】:2021-02-10 20:36:56
【问题描述】:

假设我有两个列表

firstlist = ['A','B','C','D','E']

secondlist = ['1','2','3','4','5','6','7','8','9','10']

我想将firstlist 中的一项与secondlist 中的另一项合并

所以我可以拥有:


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

我知道我可以使用zip 函数,但由于一个列表较长,它会停在较短的列表中

【问题讨论】:

标签: list sorting arraylist zip


【解决方案1】:

以下代码将帮助您按预期打印新列表

from itertools import cycle 

firstlist = ['A','B','C','D','E']
secondlist = ['1','2','3','4','5','6','7','8','9','10']

res = [[x, y] for x, y in zip(cycle(firstlist), secondlist)] 
print(res)

【讨论】:

  • 谢谢,我会接受这个答案,但我只能在 8 分钟内完成
【解决方案2】:

你想要的是将zipitertools.cycle结合起来:

import itertools
def zip_cycle_first(a, b):
  return zip(itertools.cycle(a), b)

如果您不知道ab 中哪一个更长,如果它们是列表,您可以添加长度测试:

import itertools
def zip_cycle_shortest_list(a, b):
  if len(a) > len(b):
    return zip(a, itertools.cycle(b))
  else:
    return zip(itertools.cycle(a), b)

如果您不知道哪个更长并且它们都是可迭代的,this answer 提供了一个更通用的解决方案,将itertools.teeitertools.zip_longest 结合使用。

【讨论】:

    猜你喜欢
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 2016-08-15
    • 1970-01-01
    • 2022-07-26
    相关资源
    最近更新 更多