python - 选择排序的重复问题

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

最佳答案

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/

相关文章:

python - 在 Python 的子列表中查找单词序列

linux - 在 Linux 中如何使用 sort 命令仅按第一个字段对日志文件进行排序?

c - Ansi C:高流量控制/仅用*星号替换第一次出现的内容,并删除每个重复项

string - Haskell 在字符串中加倍字符

python - 如何制作 Sublime Text 2 主题?

python - 用向量作为numpy中的条目迭代矩阵的最快方法

java - 如何将 Vector<Vector<String>> 转换为 Object[][]?

java - 对任何类型的对象进行排序,java

python - 我需要读取 CSV 文件,然后写入一个包含 0 个重复项的新 CSV 文件

python - 从整个数据框中删除一个字符