如何遍历列表a对比列表b生成布尔值列表?已尝试方法遇报错
解决列表元素存在性检查的布尔列表生成问题
咱来一步步搞定你的问题!先直接给你能得到预期结果的两种正确写法,再分析你之前出错的原因:
方法一:正确的列表推导式
这是最简洁的写法,直接对每个a中的元素判断是否在b里,返回对应的布尔值:
a = ['A', 'B', 'C', 'D'] b = ['B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'] c = [i in b for i in a] print(c) # 输出: [False, True, True, True]
你之前的列表推导式错误原因
你写的[True for i in a if i in b]是过滤逻辑——它只保留满足i in b的元素,并把它们替换成True,不满足的直接被丢弃了,所以结果只有[True, True, True],少了第一个False,自然不符合预期。
方法二:修正后的嵌套循环写法
你初始化全False列表的思路是对的,但出错在循环时用了字符串元素作为列表索引,导致TypeError。正确的做法是用整数索引来修改列表:
a = ['A', 'B', 'C', 'D'] b = ['B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'] c = [False] * len(a) # 初始化全False列表 # 用enumerate同时获取索引和元素 for idx, item in enumerate(a): if item in b: c[idx] = True print(c) # 输出: [False, True, True, True]
你之前的循环错误原因
你大概率写了类似c[i] = True的代码,这里的i是a中的字符串(比如'A'),而列表的索引必须是整数,所以才会抛出TypeError: list indices must be integers, not str的错误。
内容的提问来源于stack exchange,提问作者Nev Pires
相关产品推荐
相关产品推荐

