Python中两组元组的差异

3

我有两个元组集合ab

a = set([(1,'a'),(34,'b'), (82,'c')])
b = set([(8,'a'),(98,'c')])

我想要一个集合c,使得

c = set([(34,'b')])

什么是在Python中执行此操作的最有效方法?

你可能想要先将元组集合转换为字典:{k: v for (v, k) in a} - njzk2
2个回答

5
我猜O(n)是最有效的:
>>> b2 = {x for n,x in b}
>>> c = {(n,x) for (n,x) in a if x not in b2}
>>> c
{(34, 'b')}

1
这确实是我找到的所有答案进行基准测试后最有效的一个。谢谢。 - Ujjwal Aryan

0
我会建议使用字典来替代集合来处理a和b:
a = {k: v for (v, k) in a}
b = {k: v for (v, k) in b}

然后,只需要获取不在b中的a的内容即可。

print [(k, a[k]) for k in set(a.keys()) - set(b.keys())]

或者

b_keys = set(b.keys())
print [(k,v) for (k,v) in a.items() if k not in b_keys}

1
注意 - 最后一段代码在每次迭代时都会重新计算 set(b.keys()) - user2357112

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接