我有一组三个变量x,y,z,我想检查它们是否共享相同的值。在我的情况下,值将为1或0,但我只需要知道它们是否完全相同。目前我正在使用
if 1 == x and 1 == y and 1 == z:
sameness = True
寻找我找到的答案:
if 1 in {x, y, z}:
然而,这是作为
运作if 1 == x or 1 == y or 1 == z:
atleastOneMatch = True
是否可以检查每个中是否有1:x,y和z? 更好的是,是否有更简洁的方法来检查x,y和z是否是相同的值?
(如果重要的话,我使用python 3)
答案 0 :(得分:27)
如果您有任意序列,请使用all()
function和generator expression:
values = [x, y, z] # can contain any number of values
if all(v == 1 for v in values):
否则,只需在所有三个变量上使用==
:
if x == y == z == 1:
如果您只需要知道它们是否都是相同的值(无论是什么值),请使用:
if all(v == values[0] for v in values):
或
if x == y == z:
答案 1 :(得分:4)
检查它们是否完全相同(1或2):
sameness = (x == y == z)
括号是可选的,但我发现它提高了可读性
答案 2 :(得分:2)
这个怎么样?
x == y == z == 1
答案 3 :(得分:2)
你可以使用类似于你拥有的东西:
sameness = (len({x, y, z}) == 1)
这允许任意数量的变量。例如:
variables = {x, y, z, a, b, ...}
sameness = (len(variables) == 1)
注意:创建一个集合意味着需要对每个变量进行散列并且需要存储散列值,但all()
生成器表达式是短路的并且跟踪一次只能有两个值。因此,除了可读性之外,生成器表达式更有效。
答案 4 :(得分:1)
另一种方式:
sameness = all(e == 1 for e in [x, y, z])
答案 5 :(得分:1)
在我的情况下,该值将为1或2,但我只需要知道它们是否完全相同
是否可以检查每个中是否有1:x,y和z? 更好的是,是否有更简洁的方法来检查x,y和z是否相同?
不确定
x == y == z
相当于
(x == y) and (y == z)
如果您要比较任意(非零)数量的值:
all(values[0] == v for v in values[1:])
答案 6 :(得分:1)
[x,y,z].count(1)
将计算多少个变量的值为1
答案 7 :(得分:0)
python 中的 all() 和 any() 函数可以达到目的。
all() 充当“AND”:如果任何 ittertable 对象中的所有值都等于给定的条件值,则返回 True,否则返回 False。
示例
assert all(b == True for b in [True,True,True,True]) == True
assert all(b == True for b in [False,True,True,True]) == False
any() 充当“OR”:如果任何 ittertable 对象中的任何一个值等于给定的条件值,则返回 True,否则返回 False。
示例
assert any(b == True for b in [False,False,False,True]) == True
assert any(b == True for b in [False,False,False,False]) == False