gpt4 book ai didi

python - 如何获得两个双元素子列表列表之间的对称差异?

转载 作者:太空狗 更新时间:2023-10-30 01:07:55 27 4
gpt4 key购买 nike

我有两个列表,每个列表都包含双元素列表。

a = [['Adolf', '10'], ['Hermann', '20'], ['Heinrich', '30'], ['Heinrich', '15']]
b = [['Rudolf', '40'], ['Adolf', '50']]

我想根据子列表的“关键”第一个元素获得两个列表的“对称差异”。

这个“对称差异”如下:

c = [['Hermann', '20'], ['Heinrich', '30'], ['Heinrich', '15'], ['Rudolf', '40']]

因此,“Adolf”条目已被删除,因为它们存在于两个列表中,而其他条目(包括“Rudolf”条目)已包含在内,因为它们不存在于两个列表中。

另一个例子如下:

a = [['Adolf', '10'], ['Hermann', '20'], ['Heinrich', '30'], ['Heinrich', '15']]
b = [['Heinrich', '25']]
c = [['Adolf', '10'], ['Hermann', '20']]

我觉得这一定可以通过一些巧妙的列表理解来实现,但我不太确定如何实现。

c = [x for x in a_pairs if x not in b_pairs]

最佳答案

您可以从每个列表中创建一组名称(第一个元素)的,然后使用^ 它将获得名称集的对称差异。然后使用列表理解遍历每个列表并检查名称是否在唯一集中,然后将这两个列表理解的结果相加。

def getDifference(x,y):
symDiff = set(i[0] for i in x) ^ set(i[0] for i in y)
return [i for i in x if i[0] in symDiff] + [i for i in y if i[0] in symDiff]

第一个例子

>>> a = [['Adolf', '10'], ['Hermann', '20'], ['Heinrich', '30'], ['Heinrich', '15']]
>>> b = [['Rudolf', '40'], ['Adolf', '50']]
>>> getDifference(a,b)
[['Hermann', '20'], ['Heinrich', '30'], ['Heinrich', '15'], ['Rudolf', '40']]

第二个例子

>>> a = [['Adolf', '10'], ['Hermann', '20'], ['Heinrich', '30'], ['Heinrich', '15']]
>>> b = [['Heinrich', '25']]
>>> getDifference(a,b)
[['Adolf', '10'], ['Hermann', '20']]

关于python - 如何获得两个双元素子列表列表之间的对称差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27321536/

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