Python中按条件将列表元素转换为1和0的实现方法
问题原因
你现有代码的问题在于把if条件放在了列表推导式的末尾,这个位置的if是过滤逻辑:只有符合条件的元素才会被保留生成新值,最终你得到的只会是长度为3的[1,1,1],自然不符合需求。
正确写法
把条件判断放到返回值的位置,用三元表达式实现每个元素的转换逻辑即可:
# 写法1:三元表达式实现 res = [1 if i in ['z','b','c'] else 0 for i in mylist]
如果需要匹配的元素数量较多,建议把匹配列表改成集合,in判断的执行效率会更高:
# 写法2:集合优化匹配效率 targets = {'z','b','c'} res = [1 if i in targets else 0 for i in mylist]
如果你喜欢更简洁的写法,也可以直接利用Python布尔值和整数的对应关系(True对应1,False对应0),直接做类型转换:
res = [int(i in {'z','b','c'}) for i in mylist]
效果和上述写法完全一致。
执行结果
上述代码运行后得到的res就是你需要的[0, 0, 1, 0, 1, 1]。
内容的提问来源于stack exchange,提问作者PingPong
相关产品推荐
相关产品推荐

