Search code examples
pythonswap

Python Swap Issue


Just wondering what happens when I run

nums[i], nums[nums[i] - 1] = nums[nums[i] - 1], nums[i] in python3.

I know it works when I do like x = nums[i] - 1 nums[i], nums[x] = nums[x], nums[i] But still don't know what exactly happened.


Solution

    • To Swap elements correctly use this
    nums=[4,8,3,7,5]
    print('before',nums)
    i=3
    nums[i], nums[i - 1] = nums[i - 1], nums[i]
    print('after',nums)
    
    before [4, 8, 3, 7, 5]
    after [4, 8, 7, 3, 5]
    
    • To Know why your code doesn't work see the following code

    the code will bec executed from the most right to left

    nums=[4,8,7,3,5]
    i=3
    
    >nums[i], nums[nums[i] - 1] = nums[nums[i] - 1], nums[i]
    >nums[i], nums[nums[i] - 1] = nums[3 - 1], 3
    >nums[i], nums[nums[i] - 1] = nums[2], 3
    >nums[i], nums[nums[i] - 1] = 7, 3
    
    #first element
    >nums[i] ----> 7
    >nums[3] ----> 7
    >nums=[4,8,7,7,5]
    
    #second element
    >nums[nums[i] - 1] ---> 3
    >nums[nums[3] - 1] ---> 3 #nums[3] became 7 
    >nums[7 - 1] ---> 3
    >nums[6] ---> 3  #index out of range