我正在寻找一种更简洁的方法来进行以下类型的比较:
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
答案 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()