Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 选择排序的重复问题_Python_Sorting_Duplicates_Selection - Fatal编程技术网

Python 选择排序的重复问题

Python 选择排序的重复问题,python,sorting,duplicates,selection,Python,Sorting,Duplicates,Selection,如果我有一个所有值都是唯一的列表,那么代码运行良好。但是,如果列表中存在重复值,则在为下一次迭代查找最小值时,它将从整个列表中提取,而不仅仅是列表的其余部分 for n in range(0,len(lst)): a = min(lst[n:]) #minimum value within remainder of set i = lst.index(a) #index value for minimum value within remainder of set

如果我有一个所有值都是唯一的列表,那么代码运行良好。但是,如果列表中存在重复值,则在为下一次迭代查找最小值时,它将从整个列表中提取,而不仅仅是列表的其余部分

for n in range(0,len(lst)):
    a = min(lst[n:])  #minimum value within remainder of set
    i = lst.index(a)  #index value for minimum value within remainder of set    

    temp = lst[n]
    lst[n] = a
    lst[i] = temp
结果如下所示:

lst = [6, 8, 9, 1, 3, 4, 7, 5, 4]

[1, 8, 9, 6, 3, 4, 7, 5, 4]
[1, 3, 9, 6, 8, 4, 7, 5, 4]
[1, 3, 4, 6, 8, 9, 7, 5, 4]
[1, 3, 6, 4, 8, 9, 7, 5, 4]
[1, 3, 6, 8, 4, 9, 7, 5, 4]
[1, 3, 6, 8, 9, 4, 7, 5, 4]
[1, 3, 6, 8, 9, 7, 4, 5, 4]
[1, 3, 6, 8, 9, 7, 5, 4, 4]
[1, 3, 6, 8, 9, 7, 5, 4, 4]
我希望它能退回这个:

[1, 3, 4, 4, 5, 6, 7, 8, 9]

n
为4时,下一个最小值再次为
4
,但
lst.index()
在位置3处找到第一个
4

n
开始搜索miminum;
.index()
方法采用第二个参数
start
,从何处开始搜索:

i = lst.index(a, n)     
请注意,Python可以就地分配给两个目标,无需使用临时中介<代码>范围()只有一个参数从0开始:

for n in range(len(lst)):
    a = min(lst[n:])
    i = lst.index(a, n)
    lst[n], lst[i] = a, lst[n]
演示:


n
为4时,下一个最小值再次为
4
,但
lst.index()
在位置3处找到第一个
4

n
开始搜索miminum;
.index()
方法采用第二个参数
start
,从何处开始搜索:

i = lst.index(a, n)     
请注意,Python可以就地分配给两个目标,无需使用临时中介<代码>范围()只有一个参数从0开始:

for n in range(len(lst)):
    a = min(lst[n:])
    i = lst.index(a, n)
    lst[n], lst[i] = a, lst[n]
演示:


我将列表的范围限制为[n:]这一事实难道不应该这样做吗?@user2850240:不,您正在所有
lst
中搜索。你可以切片然后搜索<代码>列表[n:]索引(a),但是
.index()
的第二个参数更有效。我将列表的范围限制为[n:]这一事实不应该这样做吗?@user2850240:不,您正在搜索所有
lst
。你可以切片然后搜索
list[n:].index(a)
,但是
.index()
的第二个参数更有效。