Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将元组集压缩为set-python_Python_Set_Tuples - Fatal编程技术网

将元组集压缩为set-python

将元组集压缩为set-python,python,set,tuples,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 及 这些都不起作用,我不确定我是否完全理解zip()函数 编辑:如果示例案例错误并添加了一个条件,我需要如

如果我有:

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

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

编辑:如果示例案例错误并添加了一个条件,我需要如下内容:

return {(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')}

您的第一个表达式工作正常,但顺序可能不同,因为它是无序集。您得到的结果是什么?很抱歉出错了,请参见编辑。当您说A的第一个元素和B的第二个元素时,您意识到集合是无序的?那么“第一”和“第二”是怎么回事?字典排序会起作用(如果元组是字符串),但这就是你想要的吗?我指的是集合中包含的元组中的元素。我想这篇文章的最后一行说得很好,我希望是这样。起初我的文章错了,但我编辑了它。对于那些A和B,结果应该是{(A,c),(c,e)}@ryley,结果是
{(A,c),(c,e)}
。集合是无序的。
>>> {(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')}