从多个列表中获取元素

2024-03-28 18:50:36 发布

您现在位置:Python中文网/ 问答频道 /正文

给定多个列表,如图所示:

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循环的。也许是一个有着巧妙拉链的列表。我很想看看你们能想出什么办法。你知道吗

提前感谢:)


Tags: 方法元素列表forresult拉链办法
3条回答

简单的切片和拼接:

a + b[len(a):]

或具有更多列表:

res = []
for lst in (a, b, c, d):
    res += lst[len(res):]
# [1, 2, 3, 8, 6, 7]

使用itertools.zip_longest()for Python 3,可以处理任意数量的输入列表:

>>> 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,因此在使用zip_longest调用创建的每个元组中使用第一个none None元素(如果None是有效的数据值,则可以更改默认值和条件)

使用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]

相关问题 更多 >