如何将Python列表按另一列表元素位置重排并补0?
实现列表元素匹配替换需求
你需要生成的listC是基于listA的结构,保留listA中同时存在于listB的元素,其余位置用0填充。你当前给listB追加0的思路无法实现需求,因为这只能对齐长度,但元素顺序和对应位置完全不匹配。
以下是两种可行的实现方式:
方法一:利用集合提升判断效率(推荐)
将listB转换为集合,成员判断的效率会更高(尤其当列表元素较多时),再通过列表推导式遍历listA生成目标列表:
listA = ['market', 'fraud', 'crime', 'security', 'public', 'state'] listB = ['security','fraud', 'state'] # 转换为集合优化查询效率 setB = set(listB) listC = [elem if elem in setB else 0 for elem in listA] print(listC) # 输出: [0, 'fraud', 0, 'security', 0, 'state']
方法二:直接基于列表判断
如果元素数量不多,也可以直接用列表做成员判断,写法更简洁:
listC = [elem if elem in listB else 0 for elem in listA]
关于你现有代码的问题
你写的代码里变量b未定义,而且单纯给listB追加0只能让两个列表长度一致,但listB的元素顺序和listA中对应存在的元素位置不匹配,无法得到符合要求的listC,所以需要从listA的元素出发做匹配判断,而不是修改listB。
内容的提问来源于stack exchange,提问作者ForeverLearner
相关产品推荐
相关产品推荐

