首页 > 解决方案 > 在 Python 中以交替模式将 4 个列表的元素附加到单个列表中

问题描述

我有 4 个数字列表:

a = [  1,   2,   3,   4 ... 100]
b = [101, 102, 103, 104 ... 200] 
c = [201, 202, 203, 204 ... 300]
d = [301, 302, 303, 304 ... 400] 

我想将它们附加到一个新列表e中,其模式为:

- use 4 elements from a, 
- then 3 elements from b, 
- then 2 elements from c, 
- then 2 elements from d
repeat until all lists are exhausted

并继续这种模式,直到所有元素都附加到新列表中e,所以它看起来像:

e = [1, 2, 3, 4, 101, 102, 103, 201, 202, 301, 302, 5, 6, 7, 8...]

如果a用尽,则循环应以 3:2:2 的相同模式继续剩余 3 个列表,直到所有列表都用尽。

我该怎么做?

标签: python

解决方案


在重复迭代器上使用roundrobin来自Itertools 食谱或从more-itertools导入(在线尝试!):

e = [*roundrobin(*[iter(a)]*4, *[iter(b)]*3, *[iter(c)]*2, *[iter(d)]*2)]

同样的东西写的不同(在线尝试!):

a, b, c, d = map(iter, [a, b, c, d])
e = [*roundrobin(a, a, a, a, b, b, b, c, c, d, d)]

推荐阅读