选择排序存在重复问题

时间:2013-10-05 19:03:09

标签: 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    

    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]

1 个答案:

答案 0 :(得分:1)

n为4时,下一个最小值为4 ,但lst.index()会找到第一个 {{1}而是在第3位。

开始从4 搜索miminum ; n方法接受第二个参数.index(),从哪里开始搜索:

start

请注意,Python可以分配到两个目标,不需要使用临时中间件。只有一个参数的i = lst.index(a, n) 从0开始:

range()

演示:

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