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

Python - switching positions: list[i], list[list.index(minimum)] = list[list.index(minimum)], list[i]

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

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

然后我尝试使用变量索引 = list.index(最小值),突然它起作用了。

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 的参数,以便“隐藏”内置 list 函数。您将无法在函数内部调用该内置函数,因为该名称已被盗用。最好称它为 my_listarraylist_to_sort