有谁能解释一下,为什么不能把我的函数中的列表位置交换为选择排序?这是我最初所写的,但是函数返回与输入相同的列表:
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(最小值),然后突然起作用了。
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有谁能解释我的不同之处吗?为什么不把第一个解决办法说出来呢?谢谢!
发布于 2022-05-31 14:19:33
首先计算赋值的右侧(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_list、array或list_to_sort等。
https://stackoverflow.com/questions/72449217
复制相似问题