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

Python中为何merge函数末尾未使用nums1的更新值?

问题解决:原地修改nums1失效的原因及修正

你的问题核心是函数内部重新赋值nums1,导致脱离了原列表的引用,后续操作全在新列表上执行,原列表根本没被改动。

错误根源

看你的代码:

else:
    nums1 = nums1[:m]  # 这里创建了一个新的切片列表,函数内的nums1变量现在指向这个新对象
    nums1.extend(nums2)

Python里列表是引用传递,但你这里直接给nums1赋值了新的列表对象,相当于把函数内部的nums1和外部传入的原nums1彻底断开了联系。后面的sort()只是给这个新列表排序,原列表完全没变化,所以函数结束后外部的nums1还是初始值。

修正方案

要原地修改,绝对不能给nums1重新赋值新列表,直接在原列表上修改元素即可。题目里nums1的长度本来就是m+n(题目设定的前提),所以直接替换原列表的后半部分,再排序就行:

def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
    """
    Do not return anything, modify nums1 in-place instead.
    """
    # 直接把nums1从索引m开始的部分替换成nums2,这是原地修改原列表
    nums1[m:] = nums2
    # 对原列表排序
    nums1.sort()

额外说明

  • 这个写法自动覆盖了m=0的情况:当m=0时,nums1[0:] = nums2会把整个nums1替换成nums2,符合要求。
  • 如果你想实现更高效的双指针合并(不用sort),也可以,但先解决原地修改的核心问题再说。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 07:38:19