我正在寻找一种更清洁的方法来进行以下类型的比较:

if x ==  y or y == z or x == z:
    do something


尽管在这个小示例中这会很好,但我希望一次比较3个块(如上)中的24个变量。我很难找到一种更清洁的方式来发表这些声明。有任何想法吗?

编辑:使它看起来更多我想要清除的内容:

if(
   #corner 1
   cube[0] == cube[29] or
   cube[0] == cube[42] or
   cube[29] == cube[42] or
   #corner 2
   cube[2] == cube[9] or
   cube[2] == cube[44] or
   cube[9] == cube[44] or
   #corner 3
   ...
   #corner 8
   ...
   ):
   doSomething


感谢Primusa的解决方案:

corner1 = [cube[0], cube[29], cube[42]]
corner2 = [cube[2], cube[9], cube[44]]
...

if(len(corner1) != len(set(corner1)) or
   len(corner2) != len(set(corner2)) or
   ...)
    dostuff

最佳答案

这是一种检查巨型列表中的两个值是否相等的简单方法(假设您的值是可哈希的):

biglist = [LOTS OF STUFF]

if len(biglist) != len(set(biglist)):
    do stuff


set()是一个不能重复的python数据结构。结果,如果集合的长度!=列表的长度,则列表中必须存在重复项,因此值相等。

如果您的值不可散列,则可以编写一个辅助函数以使代码更好看:

def compare(x, y, z):
    return x==y or y==z or x==z

10-07 21:39