如何在Python列表中区分布尔值True与整数0、1并精准定位?
精准定位列表中的布尔值True(避免与0/1混淆)
给定列表 s = [0, 1, True],需要精准定位其中的布尔值True。由于Python中False == 0、True == 1,直接使用index()和count()会得到错误结果:
print(s.index(True))输出1(误匹配了整数1)print(s.count(True))输出2(同时匹配了整数1和布尔值True)
试过转字符串对比、判断类型的方法,但希望找到比遍历更优雅的实现方式。
解决方案
1. 定位第一个布尔值True的索引
用next()配合生成器表达式,找到第一个符合条件的索引后立即停止遍历,效率更高:
s = [0, 1, True] target_index = next(i for i, val in enumerate(s) if type(val) is bool and val is True) print(target_index) # 输出 2
这里用type(val) is bool严格判断类型,再通过val is True精准匹配布尔值,彻底避免和整数1混淆。
2. 统计所有布尔值True的数量
用sum()结合生成器表达式,简洁统计符合条件的元素数量:
count_true = sum(1 for val in s if type(val) is bool and val is True) print(count_true) # 输出 1
3. 获取所有布尔值True的索引列表
如果需要找出所有匹配的索引,用列表推导式即可:
all_indices = [i for i, val in enumerate(s) if type(val) is bool and val is True] print(all_indices) # 输出 [2]
这些写法属于Pythonic的实现方式,虽然底层还是遍历,但用内置语法简化了代码,兼顾可读性和效率,比手动写循环更优雅。
内容的提问来源于stack exchange,提问作者Тимофей Макаров
相关产品推荐
相关产品推荐

