gpt4 book ai didi

python - 合并不同长度的python列表

转载 作者:行者123 更新时间:2023-11-28 19:42:32 24 4
gpt4 key购买 nike

我正在尝试合并两个 python 列表,它们在给定索引处的值将在新列表中形成一个列表(元素)。例如:

merge_lists([1,2,3,4], [1,5]) = [[1,1], [2,5], [3], [4]]

我可以迭代此函数以合并更多列表。实现这一目标的最有效方法是什么?

编辑(第 2 部分)

在测试我之前选择的答案后,我意识到我有额外的标准和一个更普遍的问题。我还想合并包含列表 值的列表。例如:

merge_lists([[1,2],[1]] , [3,4]) = [[1,2,3], [1,4]]

在这种情况下,当前提供的答案会生成更高维度的列表。

最佳答案

一种选择是使用 itertools.zip_longest(在 python 3 中):

from itertools import zip_longest    

[[x for x in t if x is not None] for t in zip_longest([1,2,3,4], [1,5])]
# [[1, 1], [2, 5], [3], [4]]

如果你喜欢套装:

[{x for x in t if x is not None} for t in zip_longest([1,2,3,4], [1,5])]
# [{1}, {2, 5}, {3}, {4}]

在 python 2 中,使用 itertools.izip_longest:

from itertools import izip_longest    

[[x for x in t if x is not None] for t in izip_longest([1,2,3,4], [1,5])]
#[[1, 1], [2, 5], [3], [4]]

更新以处理稍微复杂的情况:

def flatten(lst):

result = []
for s in lst:
if isinstance(s, list):
result.extend(s)
else:
result.append(s)

return result

这很好地处理了上述两种情况:

[flatten(x for x in t if x is not None) for t in izip_longest([1,2,3,4], [1,5])]
# [[1, 1], [2, 5], [3], [4]]

[flatten(x for x in t if x is not None) for t in izip_longest([[1,2],[1]] , [3,4])]
# [[1, 2, 3], [1, 4]]

请注意,尽管这适用于上述两种情况,但它仍然可以在更深的嵌套结构下中断,因为情况会很快变得复杂。有关更通用的解决方案,您可以参见 here .

关于python - 合并不同长度的python列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44854829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com