[英]Why doesn't this sorting method work in Python?
我有这段代码可以对列表进行排序,而无需在python中使用sorted函数。 输出与预期相反(从最大到最小而不是从最小到最大)
将<更改为>似乎有帮助,但是我不确定为什么会这样
lista=[2,1,5,1,3,6]
for i in range(len(lista)):
for l in range(len(lista)):
if i==l:
continue
if lista[l]<lista[i]:
temp=lista[i]
lista[i]=lista[l]
lista[l]=temp
print(lista)
预期输出列表,该列表将变小到最大,但是得到相反的结果,除非我将<符号更改为>符号,但是我不确定为什么会这样?
尝试在纸上写算法的每个迭代:
i = 0: 2 1 5 1 3 6
i = 1: 1 2 5 1 3 6
i = 2: 2 1 5 1 3 6
您的问题是for l in range(len(lista)):
的内部循环for l in range(len(lista)):
每次从0开始,但是您必须从位置i开始。 当您完成内部循环时,将i递增1,然后对i进行排序之前的所有内容。 如果这种情况下内部循环从头开始重新启动,则您将获得1小于2(在i = 1上),请再次交换它。
lista=[2,1,5,1,3,6]
for i in range(len(lista)):
for l in range(i, len(lista)):
if i==l:
continue
if lista[l]<lista[i]:
temp=lista[i]
lista[i]=lista[l]
lista[l]=temp
问题是第二个循环再次遍历整个列表。 您要做的是改为查看其余元素:
lista = [2, 1, 5, 1, 3, 6]
for i in range(len(lista)):
# change range to start at i
for l in range(i, len(lista)):
if i == l:
continue
if lista[l] < lista[i]:
temp = lista[i]
lista[i] = lista[l]
lista[l] = temp
编辑:更具体地说,考虑一下外循环的最后一次迭代会发生什么。 lista[i]
将是列表上的最后一个位置,并且每次lista[l]
较小时都会交换一次,因此最后您拥有最小的数字作为最后一个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.