Python实现:按B列表元素输出A对应索引,缺失输出-1
修正列表元素索引匹配代码的方案
首先看你的需求:给定列表A和B,要严格按照B中元素的顺序,逐个输出每个元素在A中对应的所有索引(索引+1,空格分隔),如果元素在A里不存在就输出-1。你的原代码输出顺序混乱,核心问题是没有按照B的顺序处理元素,而是按字典键的顺序来输出,同时处理不存在元素的逻辑也绕了弯路。
原代码的问题分析
- 你先构建了基于B元素的字典,但后续输出时是遍历字典的key,而不是遍历B的每个元素,这直接导致输出顺序和B的顺序完全不匹配
- 处理不存在的元素时,重复遍历B统计次数再输出,逻辑繁琐还容易出错,同时
print的end参数使用不当,导致格式混乱
修正后的代码实现
我们换个思路:先提前把A中每个元素对应的所有索引(+1)整理好,然后逐个遍历B的元素,直接查映射表输出即可,逻辑更清晰,也符合需求:
A = [['a'],['a'],['b'],['c'],['b'],['a']] B = [['k'],['k'],['a'],['b'],['k']] # 第一步:构建A中元素到所有索引(+1)的映射字典 a_index_map = {} for idx, item in enumerate(A): elem = item[0] # 如果元素不在字典里,先初始化空列表 if elem not in a_index_map: a_index_map[elem] = [] # 把当前索引+1加入列表 a_index_map[elem].append(idx + 1) # 第二步:按B的顺序逐个处理元素,生成结果 output_parts = [] for item in B: elem = item[0] if elem in a_index_map: # 把索引列表转成空格分隔的字符串 output_parts.append(' '.join(map(str, a_index_map[elem]))) else: output_parts.append('-1') # 最后把所有结果用空格连接,输出最终内容 print(' '.join(output_parts))
运行结果
执行这段代码后,输出正好是你要的预期结果:-1 -1 1 2 6 3 5 -1
为什么这样改?
- 按B的顺序处理:直接遍历B的每个元素,保证输出顺序完全符合需求
- 提前构建映射表:只遍历A一次就完成所有元素的索引收集,效率更高
- 格式处理更简洁:用列表收集所有输出片段,最后一次性连接输出,避免了
print的end参数带来的格式问题
内容的提问来源于stack exchange,提问作者Plabon Kumer
相关产品推荐
相关产品推荐

