Python合并列表时末尾编号元素丢失,如何修改代码避免遗漏?
问题原因
现有代码处理替换列表的编号元素时,仅覆盖了两种场景:
- 替换元素编号和主列表现有编号相等,直接覆盖
- 替换元素编号小于主列表某一现有编号,插入到对应位置
当替换元素的编号大于主列表所有编号时,内层遍历w列表的循环跑完都不会触发break逻辑,该元素就会被直接丢弃。
修复方案
在内层遍历w列表的循环结束后,添加for-else逻辑:如果循环正常执行完没有触发break,说明当前替换元素的编号大于所有已有编号,直接追加到列表末尾即可。
修改后的完整代码如下:
a = ['Lists', 'The first list', '4. Empty', '5. Empty', '6. Lemon', '7. 2 Tangerines'] b = ['The second list is', '3. Apple ', '4. Banana ', '5. Pear', '8. Other'] w = [] for i in range(len(a)): # 提取第一个列表所有无编号元素,按顺序加入最终列表 if a[i][0] not in ['1', '2', '3', '4', '5', '6', '7', '8', '9']: w.append('0. ' + a[i]) else: n = i break for i in range(len(b)): # 提取第二个列表所有无编号元素,按顺序加入最终列表 if b[i][0] not in ['1', '2', '3', '4', '5', '6', '7', '8', '9']: w.append('0. ' + b[i]) else: m = i break w += a[n:] # 添加第一个列表的所有编号元素 for i in range(m, len(b)): # 遍历第二个列表的编号元素,执行替换/新增操作 b_num = int(b[i][:b[i].index('.')]) for j in range(len(w)): w_num = int(w[j][:w[j].index('.')]) if b_num == w_num: w[j] = b[i].strip() # 去掉多余空格,匹配预期输出格式 break elif b_num < w_num: w = w[:j] + [b[i].strip()] + w[j:] break else: # 内层循环未触发break,说明编号大于所有已有编号,追加到末尾 w.append(b[i].strip()) k = 0 # 格式化输出 while w[k][0] == '0': w[k] = w[k][3:] k += 1 print('\n'.join(w))
输出结果
运行上述代码得到的输出和预期完全一致:
Lists The first list The second list is 3. Apple 4. Banana 5. Pear 6. Lemon 7. 2 Tangerines 8. Other
内容的提问来源于stack exchange,提问作者Mr. Dandomi
相关产品推荐
相关产品推荐

