Python列表中单独使用变量作为条件的原理及相关疑问
问题解答
1. 为什么if i能筛选出非空字符串?
Python中所有对象都有默认的布尔真值,if判断会自动将对象转换为布尔值来判定:
- 空字符串
""的布尔值为False - 非空字符串(如
"Mike")的布尔值为True
因此if i本质是判断bool(i)是否为True,自然会留下所有非空字符串元素。
2. 为什么i==True无法得到预期结果?
Python的==会同时考虑值和类型的匹配度:
- 非空字符串是
str类型,True是bool类型,比如"Mike" == True的结果是False - 空字符串
"" == True的结果同样是False
所以用i==True作为筛选条件时,没有任何元素能满足,最终得到空列表,达不到筛选非空字符串的目的。
3. 为什么i==False返回空列表?
和上面的原因一致,False是bool类型,空字符串""是str类型,"" == False的结果为False;非空字符串与False比较的结果也都是False。没有元素满足该条件,因此返回空列表。
注:bool("")的结果是False,这是类型转换后的布尔值,不等于原字符串对象直接和False相等。
4. 为什么i != ""会得到对应的布尔序列?
这是直接进行字符串值的相等比较:
- 当
i是非空字符串时,i != ""的结果为True - 当
i是空字符串时,i != ""的结果为False
所以循环打印的结果就是与元素是否为空一一对应的布尔值序列,逻辑非常直接。
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

