Python如何结合布尔表达式使用count函数?为何示例代码输出为2?
问题核心解答
1 你存在的两个认知误区
- 误区1:认为非空字符串
'm'的布尔值为假。Python中只有空字符串''、数值0、None、空容器等才会被判定为布尔假,所有非空字符串的布尔值均为True,因此'm'的布尔值是真。 - 误区2:认为
and表达式会返回布尔值。Python的and/or运算符不会直接返回True/False,而是返回决定最终运算结果的操作数本身。
2 代码运行逻辑拆解
你给出的代码实际运行顺序如下:
- 先运算括号内的
'm' and 'l':
第一步判断左操作数'm'的布尔值为真,因此继续判断右操作数'l'
所有操作数均为真,最终返回最后一个操作数'l' - 代码等价于执行
print(s.count('l')) - 字符串
s='hello'中字符'l'共出现2次,因此输出结果为2
3 补充场景验证
如果要验证and返回假值的效果,可以测试如下代码:
s='hello' # 空字符串为假,and返回第一个假值'' print(s.count('' and 'l')) # 输出为0,等价于s.count('')的结果
如果想要实现布尔逻辑相关的计数,不能直接把布尔表达式传入count方法(count仅接收字符串类型的子串参数),可以改用生成器表达式实现,例如统计s中等于'm'或'l'的字符数量:
s='hello' print(sum(1 for c in s if c == 'm' or c == 'l')) # 输出为2
内容的提问来源于stack exchange,提问作者george salib
相关产品推荐
相关产品推荐

