Python - 检查多个变量是否具有相同的值

时间:2016-05-22 16:01:34

标签: python python-3.x

我有一组三个变量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)

8 个答案:

答案 0 :(得分:27)

如果您有任意序列,请使用all() functiongenerator 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