根据 python 中的索引交换数组索引
Swapping array indices based on indices in python
我正在尝试设置循环排序,其中数字的范围是提前知道的
def cyclic_sort(nums):
# TODO: Write your code here
i = 0
while i < len(nums):
while nums[i] - 1 != i:
nums[i], nums[nums[i] - 1] = nums[nums[i] - 1], nums[i]
i += 1
return nums
print(cyclic_sort([2, 1, 3]))
然而,当我重构为下面的代码运行时,代码只是挂起[=13=]
def cyclic_sort(nums):
# TODO: Write your code here
i = 0
while i < len(nums):
while nums[i] - 1 != i:
other = nums[i] - 1
nums[i], nums[nums[i] - 1] = nums[nums[i] - 1], nums[i]
i += 1
return nums
print(cyclic_sort([2, 1, 3]))
有人可以帮助我了解发生了什么吗?
nums[i] 首先被重新分配,所以当计算 nums[nums[i] - 1] = ... 时,它采用 nums[i] 的新值,在本例中为 1。
因此,在您的示例中,您得到 nums[0] = 1,然后是 nums[1-1] = 2。
您正在将当前元素的值设置为要与之交换的新值,然后将位于交换元素值位置的元素设置为当前值。
您的代码等同于:
x, y = nums[nums[i] - 1], nums[i]
nums[i] = x #nums[i] is set to value of element you want to swap
nums[nums[i] - 1] = y #nums[(value at swapped element) - 1] = (current elements original value)
你也不需要 while 循环,它没有做任何有用的事情,因为你已经根据值知道数字应该在哪个位置,所以你只需要每个位置检查一次。
交换赋值顺序,因为 nums[i] 不会受到更改 nums[nums[i] - 1] 值的影响。
def cyclic_sort(nums):
# TODO: Write your code here
i = 0
while i < len(nums):
if nums[i] - 1 != i:
nums[nums[i] - 1], nums[i] = nums[i], nums[nums[i] - 1]
i += 1
return nums
print(cyclic_sort([2, 1, 3]))
我正在尝试设置循环排序,其中数字的范围是提前知道的
def cyclic_sort(nums):
# TODO: Write your code here
i = 0
while i < len(nums):
while nums[i] - 1 != i:
nums[i], nums[nums[i] - 1] = nums[nums[i] - 1], nums[i]
i += 1
return nums
print(cyclic_sort([2, 1, 3]))
然而,当我重构为下面的代码运行时,代码只是挂起[=13=]
def cyclic_sort(nums):
# TODO: Write your code here
i = 0
while i < len(nums):
while nums[i] - 1 != i:
other = nums[i] - 1
nums[i], nums[nums[i] - 1] = nums[nums[i] - 1], nums[i]
i += 1
return nums
print(cyclic_sort([2, 1, 3]))
有人可以帮助我了解发生了什么吗?
nums[i] 首先被重新分配,所以当计算 nums[nums[i] - 1] = ... 时,它采用 nums[i] 的新值,在本例中为 1。
因此,在您的示例中,您得到 nums[0] = 1,然后是 nums[1-1] = 2。
您正在将当前元素的值设置为要与之交换的新值,然后将位于交换元素值位置的元素设置为当前值。
您的代码等同于:
x, y = nums[nums[i] - 1], nums[i]
nums[i] = x #nums[i] is set to value of element you want to swap
nums[nums[i] - 1] = y #nums[(value at swapped element) - 1] = (current elements original value)
你也不需要 while 循环,它没有做任何有用的事情,因为你已经根据值知道数字应该在哪个位置,所以你只需要每个位置检查一次。
交换赋值顺序,因为 nums[i] 不会受到更改 nums[nums[i] - 1] 值的影响。
def cyclic_sort(nums):
# TODO: Write your code here
i = 0
while i < len(nums):
if nums[i] - 1 != i:
nums[nums[i] - 1], nums[i] = nums[i], nums[nums[i] - 1]
i += 1
return nums
print(cyclic_sort([2, 1, 3]))