簡體   English   中英

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]

誰能解釋一下,為什么不能將我的 function 中的列表位置交換為選擇排序? 這是我最初寫的,但 function 返回與輸入相同的列表:

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 內置名稱相同的名稱。 您的 function 采用一個名為list的參數,以便“隱藏”內置list function。您將無法在 function 中調用該內置列表,因為該名稱已被盜用。 最好稱它為my_listarraylist_to_sort等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM