Python:函数不改变数组中的元素
我知道在Python中,变量是通过给对象一个引用副本来传递的。但是我不明白为什么在我写的下面的代码中,函数分区没有改变arr的元素Python:函数不改变数组中的元素,python,variables,Python,Variables,我知道在Python中,变量是通过给对象一个引用副本来传递的。但是我不明白为什么在我写的下面的代码中,函数分区没有改变arr的元素 这似乎是一个bug: Assume arr = [1,3,4,7,5,8], lo=3, hi=6 def Partition(arr, lo, hi): pivot = arr[lo] <- this is arr[3] = 7 i = lo <- i = 3 j = hi while(Tr
这似乎是一个bug:
Assume arr = [1,3,4,7,5,8], lo=3, hi=6
def Partition(arr, lo, hi):
pivot = arr[lo] <- this is arr[3] = 7
i = lo <- i = 3
j = hi
while(True):
while(arr[i] < pivot): <- arr[3] = 7 so condition fails hence no swap
你的配分函数有一个逻辑问题。
如果使用调试器跟踪它,您将看到它总是在返回之前将数组恢复到初始状态。数组实际上会被视为已修改,问题是在对其进行一段时间的修改后,它会恢复到进入函数时的状态
你使用调试工具吗?如果没有,现在就开始。
如果是这样,请在returnj语句上放置一个断点,然后检查数组,您将了解我的意思
您正在尝试实现霍尔分区,对吗?
我想你有点搞混了。问题在于,在第一次循环迭代之前,您正在与pivot进行比较,最后您将再次比较刚刚交换的元素
Assume arr = [1,3,4,7,5,8], lo=3, hi=6
def Partition(arr, lo, hi):
pivot = arr[lo] <- this is arr[3] = 7
i = lo <- i = 3
j = hi
while(True):
while(arr[i] < pivot): <- arr[3] = 7 so condition fails hence no swap