1

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

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]
4

1 回答 1

1

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

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]
于 2013-10-05T19:07:38.003 回答