给出多个列表,如下所示:
a = [1, 2, 3]
b = [5, 6, 7, 8]
c = [9, 0, 1]
d = [2, 3, 4, 5, 6, 7]
...
在开始从第二个列表中获取元素之前,我希望能够将它们组合起来以尽可能多地从第一个列表中获取元素,因此结果将是:
result = [1, 2, 3, 8, 6, 7]
有没有特别好的写方法。我想不出没有for循环的真正简单的工具。也许有一个聪明的拉链列表理解。我很想看看你们能想到什么。
感谢进阶:)
答案 0 :(得分:5)
简单的切片和连接:
a + b[len(a):]
或具有更多列表:
res = []
for lst in (a, b, c, d):
res += lst[len(res):]
# [1, 2, 3, 8, 6, 7]
答案 1 :(得分:2)
对于Python 3,itertools.zip_longest()
可以处理任意数量的输入列表:
>>> from itertools import zip_longest
>>> [next(x for x in t if x is not None) for t in zip_longest(a,b,c,d)]
[1, 2, 3, 8, 6, 7]
默认填充值为None
,因此请使用None
调用创建的每个元组中的第一个无zip_longest
元素(如果None
可以更改默认值和条件是有效的数据值)
答案 2 :(得分:0)
使用functools.reduce
:
from functools import reduce
print(list(reduce(lambda a, b: a + b[len(a):], [a, b, c, d])))
这将输出:
[1, 2, 3, 8, 6, 7]