如何得到两个二元子列表之间的对称差?

2024-04-28 20:51:53 发布

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

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

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

我想得到两个列表的“对称差异”,基于子列表的“关键”第一个元素。在

这种“对称差异”如下:

^{pr2}$

因此,“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]

Tags: in元素列表forif条目差异例子
1条回答
网友
1楼 · 发布于 2024-04-28 20:51:53

您可以从每个列表中生成一个set个名称(第一个元素),然后使用^,这将获得名称集的对称差异。然后使用列表理解来迭代每个列表并检查名称是否在唯一集中,然后添加这两个列表理解的结果。在

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]

第一个例子

^{pr2}$

第二个例子

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

相关问题 更多 >