这实际上是关于集合推导的语义的问题,但我首先需要解释一下上下文。我正在尝试创建一组新的元组,其中 touple 中的配对值是唯一的,无论配对中值的顺序如何。简化我的实际程序,我所拥有的是{(1, 2), (2, 1), (3, 4)}
我想得到的东西{(1, 2), (3, 4)}
我试着做这样的事情:
oldSet = {(1, 2), (2, 1), (3, 4)}
newSet = set()
newSet = {(val1, val2) for (val1, val2) in oldSet if not (val2, val1) in newSet}
但是,newSet
is{(1, 2), (2, 1), (3, 4)}
暗示我的条件表达式有问题。我对理解的理解表明,上面是这样的语法糖:
newSet = set()
for (val1, val2) in oldSet:
if not (val2, val1) in newSet:
newSet.add((val1, val2))
这种传统的循环结构有效(newSet
is {(1, 2), (3, 4)}
)。是否有一些关于理解的东西导致条件在newSet
有任何成员之前被评估?我对 Python 还很陌生,所以我想知道我是否遗漏了一些微妙的东西。
谢谢!