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

Python列表推导式报错:TypeError: 'bool'对象不可迭代 求助

解决列表推导式中的TypeError: bool不可迭代问题

你的错误根源在于错误使用了__contains__方法:

  • lista.__contains__("h")的作用是判断列表lista中是否存在元素等于"h",它返回的是一个布尔值(True或False)。
  • 而in运算符要求右侧必须是可迭代对象(比如字符串、列表),你写的s.lower() in lista.__contains__("h")相当于让Python去迭代一个布尔值,自然会抛出TypeError: argument of type 'bool' is not iterable。

从代码逻辑看,你应该是想筛选出包含'h'、'o'、'a'中任意一个字符的字符串,然后给它们加上...。以下是修正后的两种写法:

写法1:直接逐个判断字符

lista = ["Hello", "And", "Goodbye"]

uppgift = [s + "..." for s in lista if 'h' in s.lower() or 'o' in s.lower() or 'a' in s.lower()]

print(uppgift)  # 输出: ['Hello...', 'And...', 'Goodbye...']

写法2:用any()简化判断

如果需要检查的字符较多,用any()会更简洁:

lista = ["Hello", "And", "Goodbye"]

target_chars = ('h', 'o', 'a')
uppgift = [s + "..." for s in lista if any(char in s.lower() for char in target_chars)]

print(uppgift)  # 输出同样正确

补充说明

  • s.lower()是把字符串转为小写,这样不管原字符串是大写还是小写,都能匹配到目标字符;
  • 不要直接调用__contains__方法,Python中判断元素是否存在的标准写法是x in y,比如判断字符是否在字符串里用'h' in s.lower(),而不是调用底层的魔法方法。

内容的提问来源于stack exchange,提问作者stacker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 02:00:04