在不知道它们的值的情况下检查python中几个变量的不等式

问题描述

我有四个字符串变量:a,b,c,d。我不知道它们的值(它们是随机分配的),我不在乎。我只需要确保它们中的每一个都与其他变量不同,并且没有两个变量具有相同的值。我试过了

if a != b != c != d:
    return true

但它不起作用。我该怎么办?

解决方法

您可以使用幼稚的方法:

if a != b and a != c and a != d and b != c and b != d and c != d:
    # do something

或者你可以利用一个集合不能两次保存相同的可散列值的事实:

if len(set([a,b,c,d])) == 4:
    # do something

或者,更短的写法:

if len({a,d}) == 4:
    # do something

您的代码不起作用的原因是因为您确实在这样做:

if a != b and b != c and c != d:
    return true

因此,它只检查您需要检查的部分内容,它检查彼此直接跟随的所有值是否相等,但不检查相隔多于一个位置的值是否相等。

,

这样做吗?

assert len({a,d}) == 4 # set of 4 distinct elements should be 4

if len({a,d}) == 4:
    return True

您的条件不起作用的原因

>>> 1 != 2 != 1
True

从上面的例子来看,1 != 22 != 1,因此传递了条件。它不会检查您的第一个和第三个变量是否相等。

,

你不能像这样链接比较。下面是使用 if 语句的一种方法,虽然它很乱。

if (a != b and a != c and a != d
        and b != c and b != d and c !=d):
        return True

一个不错的方法(尽管速度和空间成本较低)如下:

things_to_see_if_unique = [a,d]
if len(things_to_see_if_unique) == len(set(things_to_see_if_unique)):
    return True

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...