条件语句的奇怪行为?
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":
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":