Python自定义升序排序时列表元素交换失效,如何修复对应代码
问题原因分析
- 遍历取值的问题:你通过
for item in lst[i + 1:]获取到的item是列表切片的临时拷贝值,并非原列表对应位置元素的引用,因此修改item不会同步更新原列表中对应下标的元素。你写的lst[i], item = item, lst[i]仅修改了lst[i]和临时变量item的值,原列表中待交换的后续位置元素完全没有变更,最终导致出现值覆盖的问题。 - 缩进逻辑错误:当前交换代码的缩进没有放在
if item < lst[i]的判断分支下,无论元素大小是否满足交换条件都会执行交换逻辑,不符合排序的基本要求。
修正方案
直接遍历下标而非元素值,通过下标操作原列表的元素,同时调整交换逻辑的缩进即可:
def sortingStoL(lst): for i in range(len(lst)): # 遍历i之后的所有下标,直接操作原列表元素 for j in range(i + 1, len(lst)): if lst[j] < lst[i]: # 直接交换原列表两个下标位置的元素 lst[i], lst[j] = lst[j], lst[i] return lst a_list = [5, 4, 3, 2] print(sortingStoL(a_list))
运行输出
[2, 3, 4, 5]
如果你需要保留原代码里的调试打印逻辑,也可以对应调整为:
def sortingStoL(lst): for i in range(len(lst)): for j in range(i + 1, len(lst)): if lst[j] < lst[i]: print(lst[j], lst[i]) lst[i], lst[j] = lst[j], lst[i] print(lst) return lst a_list = [5, 4, 3, 2] print(sortingStoL(a_list))
内容的提问来源于stack exchange,提问作者Hayato Koyama
相关产品推荐
相关产品推荐

