Python如何提取两嵌套列表相同元素的子列表位置并存储计算
实现方案
你原有代码仅对比了两个子列表的首个元素,没有遍历所有子元素、记录对应位置,无法得到预期结果,可按如下逻辑实现:
完整代码
list1 = [['*1', '*2'], ['*3', '*4'], ['*5', '*6', '+1', '+4'], ['+2', '+5', '+3']] list2 = [['*2', '*6', '*1', '+4', '*4'], ['*3', '*5', '+3', '+5'], ['+1'], ['+2']] # 生成list1元素-子列表序号映射 list1_location = {} for sub_idx, sub_list in enumerate(list1, start=1): for elem in sub_list: list1_location[elem] = str(sub_idx) # 生成list2元素-子列表序号映射 list2_location = {} for sub_idx, sub_list in enumerate(list2, start=1): for elem in sub_list: list2_location[elem] = str(sub_idx) # 计算位置差值映射 diff_dict = {} for elem in list1_location: pos1 = int(list1_location[elem]) pos2 = int(list2_location[elem]) diff_dict[elem] = str(pos1 - pos2 + 1)
逻辑说明
enumerate(迭代对象, start=1)可以在遍历列表时直接获取从1开始计数的索引值,不需要手动维护计数变量,刚好匹配你需要的子列表序号规则- 两层遍历:外层遍历拿到每个子列表的序号和内容,内层遍历子列表内的所有元素,将元素作为键、子列表序号转为字符串后作为值存入字典,即可完成前两个位置映射的需求
- 由于两个嵌套列表的元素完全一致,遍历任意一个位置字典的所有键,取出两个字典中对应位置的整数值做
pos1 - pos2 +1运算,结果转回字符串存入差值字典即可
运行结果
运行代码后得到的三个字典键值对和你给出的期望输出完全一致(Python3.7+字典保留插入顺序,键的排列顺序差异不影响结果正确性):
list1_location = {'*1': '1', '*2': '1', '*3': '2', '*4': '2', '*5': '3', '*6': '3', '+1': '3', '+4': '3', '+2': '4', '+5': '4', '+3': '4'} list2_location = {'*2': '1', '*6': '1', '*1': '1', '+4': '1', '*4': '1', '*3': '2', '*5': '2', '+3': '2', '+5': '2', '+1': '3', '+2': '4'} diff_dict = {'*1': '1', '*2': '1', '*3': '1', '*4': '2', '*5': '2', '*6': '3', '+1': '1', '+4': '3', '+2': '1', '+5': '3', '+3': '3'}
内容的提问来源于stack exchange,提问作者user19387092
相关产品推荐
相关产品推荐

