如果我有一个列表,其中所有值都是唯一的,代码运行正常。但是,如果列表中存在重复值,则在查找下一次迭代的最小值时,它将从整个列表中拉出,而不是仅从列表的其余部分开始。
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]
答案 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]