如何在clean语句中测试3个变量中任何2个变量的相等性?

时间:2018-04-08 02:38:22

标签: python python-2.7

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

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

3 个答案:

答案 0 :(得分:1)

这是一种检查巨大列表中任何两个值是否相等的简单方法(假设您的值是可清除的):

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

答案 1 :(得分:-1)

这是伪代码......这样的事情怎么样:

class Corner:

    def __init__(self x, y, z):
        self.x = x;
        self.y = y;
        self.z = z;

    def hasMatch(self)
       return x==y || x==z || y==z;

然后使用:

c = Corner(10,11,10);
hasMatch = c.HasMatch();

答案 2 :(得分:-1)

您可以创建一个类来执行相同的操作。一个例子如下所示

class TripleCompare(object):

    def __init__(self, inpList):
        self.allEle = inpList

    def compare(self):
        resList = []
        for a,b,c in self.allEle:
            resList.append(a==b or b==c or c==a)
        return resList
k=TripleCompare([[1,2,3],[4,5,6],[7,8,9]]) 
# send your elements like shown above, say TripleCompare([[c[0],c[29],c[49]],[c[21],c[22],c[23]]) (for example)
k.compare()