为什么我观察到 nums.reverse() 和 nums = nums[::-1] 的不同行为

问题描述 投票:0回答:1

我观察到不同的行为

nums.reverse()   and    nums = nums[::-1] 

class Solution(object):
    def nextPermutation(self, nums):
        """
        :type nums: List[int]
        :rtype: None Do not return anything, modify nums in-place instead.
        """
        i=len(nums)-2
        while(i>-1  and nums[i]>=nums[i+1]):
            i-=1
            continue
        
        if i==-1:
            # nums.reverse()
            nums = nums[::-1]
            print(nums)
            return 
        
        j=len(nums)-1
        while(j>i  and nums[i]>nums[j]):
            j-=1
            
        nums[i],nums[j] =nums[j], nums[i]

我看到两者的打印都是正确的,但在 nums = nums[::-1] 的情况下,执行代码块后最终的就地值不会反转。我认为使用任何一个都应该有效

python reverse
1个回答
0
投票

当你这样做时:

nums = nums[::-1]

您正在创建一个新的列表对象,然后将 nums 变量重新分配给这个新列表。这意味着传递给函数的原始列表保持不变。

此外:

nums.reverse()

您正在原始列表对象上调用reverse()方法,这会就地修改它。传递给函数的原始列表被直接修改。

为了进一步澄清,请考虑以下示例:

def modify_list_1(lst):
    lst.reverse()

def modify_list_2(lst):
    lst = lst[::-1]

a = [1, 2, 3]
modify_list_1(a)
print(a)  # Outputs: [3, 2, 1]

b = [1, 2, 3]
modify_list_2(b)
print(b)  # Outputs: [1, 2, 3]
© www.soinside.com 2019 - 2024. All rights reserved.