Python -切换位置:list[i], list[list.index(minimum)] = list[list.



有没有人可以解释我,为什么不可能在我的函数中交换列表位置进行选择排序?这是我一开始写的,但是函数返回与输入相同的列表:

def selection_sort(list):
for i in range(0, len(list)):
minimum = list[i]
for j in range(i + 1, len(list)):
if list[j] < minimum:
minimum = list[j]
list[i], list[list.index(minimum)] = list[list.index(minimum)], list[i]
return list

然后我尝试使用变量index = list.index(minimum),突然它工作了。

def selection_sort(list):
for i in range(0, len(list)):
minimum = list[i]
for j in range(i + 1, len(list)):
if list[j] < minimum:
minimum = list[j]
index = list.index(minimum)
list[i], list[index] = list[index], list[i]
return list

谁能解释我的区别,为什么它不是正确的第一个解决方案?谢谢你!

首先计算右边的赋值(list[list.index(minimum)], list[i]),然后赋值给左边的元组list[i], list[list.index(minimum)]

我猜下一部分,但我假设list[i]被分配,然后是list[list.index(minimum)]。但是,由于您已经分配给list[i],因此在第二次找到list.index(minimum)之前已经修改了列表。由于不是在相同的列表中搜索,因此索引可能不同。

第二次尝试计算索引一次,并在两个位置使用相同的值。

作为旁注,最好不要将变量命名为与python内置名称相同的名称。你的函数接受一个名为list的参数,因此"shadows"内置的list函数。您将无法调用函数中的内置功能,因为名称已被窃取。最好将其命名为my_listarraylist_to_sort等。

最新更新