You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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,提问作者Тимофей Макаров

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 15:45:57