如何在python中测试两个列表是否相等

时间:2012-06-27 17:31:56

标签: python list if-statement equality

当我认为它应该返回true时,以下脚本返回false。知道这里发生了什么吗?非常感谢,伙计们!

test=['Pop']
test1='Pop'

if (test==('POP' or 'Pop' or 'pop' or ['POP'] or ['Pop'] or ['pop'])):    
    print "yes"
else:
    print "no"

目前,输出为'no'。

5 个答案:

答案 0 :(得分:7)

你不了解python如何处理语句。 Python不是自然语言。

if (test==(['Pop'] or 'Pop')):

因为or位于parens内部,所以它首先处理它。所以看看

['Pop'] or 'Pop'

由于['Pop']被认为是True,因此python将整个语句缩减为:

if (test==['Pop']):

此时,它会测试test是否等于['Pop']

您实际想要做的是:

(test == ['Pop']) or (test == 'Pop')

这与

完全不同
 test == (['Pop'] or 'Pop')

答案 1 :(得分:2)

如果你这样写,当你使用testtest1时if语句就是真的:

test=['Pop']
test1='Pop'
if (test in ('POP', 'Pop', 'pop', ['POP'], ['Pop'], ['pop'])):
    print "yes"
else:
    print "no"

你基本上创造了一个包含所有可能性的大元组:三个字符串和三个列表。如果你的变量存在,if语句为真。

答案 2 :(得分:1)

test == (a or b)test == a or test == b不同。

(a or b)返回a iff bool(a)为True,否则返回b。因此test == ('POP' or whatever)等同于test == 'POP',因为bool('POP')与Python中的任何其他非空字符串一样为真。

要测试多个值,您可以使用:value in [a, b]

注意:['a'] != 'a' - 后者是一个字符串,而前者是一个包含字符串的列表。

在您的情况下,您可以test[0].lower() == 'pop'

答案 3 :(得分:0)

test=['Pop']
test1='Pop'
if test1 == 'POP' or test1 == 'Pop' or test1 == 'pop' or test1 == ['POP'] or test1 == ['Pop'] or test1 == ['pop']:
    print "yes"

else:
    print "no"

每一个都是单独的测试。

答案 4 :(得分:0)

看起来用户只是试图进行不区分大小写的比较:

if test1.lower() == 'pop':
    print 'yes'
else:
    print 'no'