如何对字符串列表与布尔值列表执行元素级“乘法”操作?
实现字符串列表与布尔值列表的元素级匹配替换
方法1:列表推导式(最简洁直观)
直接通过zip将两个列表的对应元素配对,再用条件判断生成结果列表:
list_1 = ['A','B','C','D'] list_2 = [True,False,True,False] list_output = [s if b else '' for s, b in zip(list_1, list_2)] # 结果:['A', '', 'C', '']
zip(list_1, list_2)会把两个列表的对应元素打包成元组,列表推导式遍历每个元组,根据布尔值b决定保留原字符串s还是替换为空串。
方法2:使用map+lambda
如果偏好函数式写法,也可以用map配合匿名函数实现:
list_output = list(map(lambda s, b: s if b else '', list_1, list_2))
map会对list_1和list_2的对应元素逐一应用lambda函数,最后通过list()将迭代器转为列表。
处理列表长度不一致的情况
如果两个列表长度不同,zip会以较短的列表为准截断结果。要是需要保留较长列表的剩余元素,可以用itertools.zip_longest:
from itertools import zip_longest # 超出list_2长度的元素默认保留原字符串(fillvalue=True) list_output = [s if b else '' for s, b in zip_longest(list_1, list_2, fillvalue=True)] # 若想把超出部分替换为空串,将fillvalue设为False即可
内容的提问来源于stack exchange,提问作者Solomon123
相关产品推荐
相关产品推荐

