如果我有一个所有值都是唯一的列表,则代码运行良好。但是,如果列表中存在重复值,则在查找下一次迭代的最小值时,它将从整个列表中提取,而不仅仅是列表的其余部分。
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()
发现第一个 4
位于位置 3。
开始从n
搜索最小值;; .index()
方法采用第二个参数 start
,从哪里开始搜索:
i = lst.index(a, n)
请注意,Python 可以就地分配两个目标,无需使用临时中间体。仅一个参数的 range()
从 0 开始:
for n in range(len(lst)):
a = min(lst[n:])
i = lst.index(a, n)
lst[n], lst[i] = a, lst[n]
演示:
>>> lst = [6, 8, 9, 1, 3, 4, 7, 5, 4]
>>> for n in range(0,len(lst)):
... a = min(lst[n:])
... i = lst.index(a, n)
... lst[n], lst[i] = a, lst[n]
...
>>> lst
[1, 3, 4, 4, 5, 6, 7, 8, 9]
关于python - 选择排序的重复问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19201566/