首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -交换职位: list[i],list[list.index(最低)]=list[list.index(最低)],list[i]

Python -交换职位: list[i],list[list.index(最低)]=list[list.index(最低)],list[i]
EN

Stack Overflow用户
提问于 2022-05-31 14:01:28
回答 1查看 35关注 0票数 0

有谁能解释一下,为什么不能把我的函数中的列表位置交换为选择排序?这是我最初所写的,但是函数返回与输入相同的列表:

代码语言:javascript
复制
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(最小值),然后突然起作用了。

代码语言:javascript
复制
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

有谁能解释我的不同之处吗?为什么不把第一个解决办法说出来呢?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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_listarraylist_to_sort等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72449217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档