条件语句的奇怪行为?

Odd behaviour from conditional statement?

dummy_list = ["1", "2", "3", "4"]

if 1 in dummy_list is [0]:
    print ("it is the first element")
else:
    print ("no it is not the first element")

我正在尝试检查一个列表,确定变量在列表中的位置是否在指定的语言环境中。现在,尽管 [0] 是 1,(我通过以下方式验证了这一点):

print (dummy_list[0]) 

返回1;我很困惑为什么条件语句不是这样。

in 是与 is 分开的测试;您 chained the comparisons,并且 Python 执行测试为:

(1 in dummy_list) and (dummy_list is [0])

两个测试都失败了。 dummy_list中没有1整数,只有一个"1"字符串对象。并且 dummy_list[0] 表达式生成的列表不是完全相同的对象;后者总是会产生一个新的列表对象,所以 is identity test 总是失败。

你不能对 in 测试做出断言;您无法测试包含匹配的索引。直接测试索引 :

if dummy_list[0] == "1":

或者如果 dummy_list 可能是一个空列表,添加一个测试以确保它不为空:

if dummy_list and dummy_list[0] == "1":