Python中is运算符语法问题:为何条件判断输出所有列表元素?
问题原因及修正方案
你的代码问题出在条件判断的逻辑错误,和is/==运算符本身关系不大,核心是你写错了判断表达式。
错误原因
你写的if value is '0' or '1',Python会按优先级解析成 (value is '0') or '1'。由于非空字符串'1'在布尔语境下永远是True,不管前面的value is '0'结果如何,整个条件都会返回True,所以循环会输出所有列表元素。就算换成==,如果写成value == '0' or '1',问题完全一样——因为'1'始终为真,条件永远成立。
另外补充:判断字符串值相等应该用==,而不是is。is是用来判断两个对象是否是同一个内存地址的,短字符串可能因为Python的字符串驻留机制看起来能用,但这是不可靠的,判断值相等必须用==。
正确写法
有两种简洁且正确的写法:
- 完整写出两个判断表达式,用
or连接:
if value == '0' or value == '1':
- 用
in判断元素是否在目标集合中(更推荐,尤其是判断值较多时):
if value in {'0', '1'}:
修正后的完整代码
另外注意:不要用list作为变量名,会覆盖Python内置的list类型,导致后续潜在问题。
my_list = ['xy', 'yz', '=', '1', 'in', '>', 't'] for value in my_list: if value in {'0', '1'}: Zustand = value print("Zustand:", Zustand)
内容的提问来源于stack exchange,提问作者Markus
相关产品推荐
相关产品推荐

