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()
的第二个参数更有效。