zip集的元组到集合 - python

时间:2016-03-05 20:15:47

标签: python set tuples

如果我有:

A = {(a,b),(c,d)}
B = {(b,c),(d,e),(x,y)}

我正在寻找创建一个新集合,其中第一个元素来自A,第二个元素来自B,当其他元素相同时:

C = {(a,c),(c,e)}

我试过了:

return {(a,c) for (a,b) in A for (b,c) in B} # nested loop creates too many results

#return {zip(a,c)} in a for (a,b) in A and c for (b,c) in B
#return {(a,c) for (a,c) in zip(A(a,b), B(b,c))}
#return {(a,c) for (a,b) in A for (b,c) in B}

这些只是不起作用,我不确定我是否完全理解zip()函数。

编辑:如果示例案例错误并添加了条件,我需要这样的内容:

return {(a,d) for (a,b) in A for (c,d) in B} # but ONLY when b == c

1 个答案:

答案 0 :(得分:2)

在你的最后一次尝试中

{(a,d) for (a,b) in A for (c,d) in B} # but ONLY when b == c
你几乎得到了它。您只需将条件从注释移动到集合理解:

>>> {(a,d) for (a,b) in A for (c,d) in B if b == c}
{('c', 'e'), ('a', 'c')}

当然,订单是随机的,因为集合是无序的。

>>> {('c', 'e'), ('a', 'c')} == {('a','c'),('c','e')}
True
>>> {('a','c'),('c','e')}
{('c', 'e'), ('a', 'c')}