You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python递归排序函数返回仅含最后一个值的列表问题求助

问题根因
  • 你主函数中打印的是原始输入的liste列表,而非递归函数返回的排序结果。你调用recSort(liste)时没有接收函数return的result,自然没法直接拿到排序后的内容。
  • Python中列表属于可变对象,函数内对传入的列表做的修改会直接作用到原对象上:你代码里listIn = liste是直接引用而非拷贝,每次递归调用listIn.pop(smallestIndex)都是在删除原列表的元素,递归结束后原列表只会剩下最后一个未被弹出的最大值10,所以主函数打印liste会输出[10]。
  • 你困惑的"加print函数就正常"是误解:你函数内部打印的是专门用来存排序结果的result列表,本身就是正确的,和加不加那行print没有关联。
修复方法

方案1:接收并打印函数返回的排序结果

修改主函数代码即可,不需要改动递归逻辑:

if __name__ == "__main__":
    liste = [5, 2, 4, 8, 7, 10, 6]
    # 接收排序后的返回结果
    sorted_list = recSort(liste)
    # 打印排序结果,而非被修改的原列表
    print(sorted_list)

方案2:保留原始输入列表不被修改

如果不希望递归过程修改原始的输入列表,在函数开头对传入的列表做拷贝即可,避免直接操作原对象:

def recSort(liste, result=None):
    # 做列表拷贝,后续修改只作用在副本上,不影响原输入
    listIn = liste.copy()
    length = len(listIn)
    smallestIndex = smallestListIndex(listIn)
    
    # 为避免每次递归都创建新列表,此处初始化中间结果列表
    if result is None:
        result = []
        
    if length == 1:
        result.append(listIn[smallestIndex])
        return result
        
    else:
        result.append(listIn[smallestIndex])
        listIn.pop(smallestIndex)      
        length -= 1
        # 将中间结果列表传入下一层递归
        return recSort(listIn, result)

修改后主函数既可以接收返回值打印排序结果,原liste也会保留初始值不变。

内容的提问来源于stack exchange,提问作者Shin0X

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:15:05