从多个列表中获取元素

时间:2018-10-05 10:46:05

标签: python list

给出多个列表,如下所示:

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循环的真正简单的工具。也许有一个聪明的拉链列表理解。我很想看看你们能想到什么。

感谢进阶:)

3 个答案:

答案 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]