gpt4 book ai didi

python - 比较两个嵌套列表并保持元素的并集

转载 作者:行者123 更新时间:2023-12-04 13:36:09 31 4
gpt4 key购买 nike

标题可能有误导性。我会尽量解释清楚。
我有两组列表:

a = [
[(1.5, 13), (1.5, 16)], #first list
[(5.4, 100.5), (5.3, 100.5)] #second list
]

b = [
[(1, 2), (1.5, 3)], #first list
[(5.4, 100.5), (5.3, 100.5)] #second list
]

我想比较 first listafirst listb等等。如果我发现任何重复项,请删除重复项。最终结果将如下所示:
c = [
[(1.5, 13), (1.5, 16), (1, 2), (1.5, 3)], #first list
[(5.4, 100.5), (5.3, 100.5) ] #second list
]

如您所见, ab最终将追加形成 c .但是,不会附加重复项,如 second list 中所示的 c .位置不可变。

我怎样才能有效地实现这一目标?

最佳答案

使用 zip 将两个列表压缩在一起,然后 set 从连接对中删除重复项:

[list(set(x + y)) for x, y in zip(a, b)]
# [[(1.5, 16), (1, 2), (1.5, 13), (1.5, 3)], [(5.4, 100.5), (5.3, 100.5)]]

如果您想保持顺序(集合是无序的),请使用字典并使用 dict.fromkeys 获取键(假设有序字典使用 Python 3.6+):
[list(dict.fromkeys(x + y)) for x, y in zip(a, b)]
# [[(1.5, 13), (1.5, 16), (1, 2), (1.5, 3)], [(5.4, 100.5), (5.3, 100.5)]]

对于较低版本的python(字典是无序的),您需要使用 collections.OrderedDict :
from collections import OrderedDict

[list(OrderedDict.fromkeys(x + y)) for x, y in zip(a, b)]
# [[(1.5, 13), (1.5, 16), (1, 2), (1.5, 3)], [(5.4, 100.5), (5.3, 100.5)]]

如果您希望元组按第一个元素排序,请使用 sorted :
[sorted(set(x + y)) for x, y in zip(a, b)]
# [[(1, 2), (1.5, 3), (1.5, 13), (1.5, 16)], [(5.3, 100.5), (5.4, 100.5)]]

关于python - 比较两个嵌套列表并保持元素的并集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61909049/

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