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

2024-10-06 11:20:23 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

Tags: or方法编辑类型lenifdosomething
3条回答

这是伪代码。。。这样怎么样:

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();

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

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()

下面是一个简单的方法来检查一个巨大列表中的任意两个值是否相等(假设您的值是可哈希的):

biglist = [LOTS OF STUFF]

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

set()是一个python数据结构,不能有重复项。因此,如果一套的长度!=列表的长度,则列表中必须有重复项,因此值相等。你知道吗

如果您的值是不可哈希的,那么您可以编写一个helper函数,以使代码变得更好:

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

相关问题 更多 >