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
相关产品推荐
相关产品推荐

