我希望你明白为什么你的索引超出范围错误。
这是一个问题,但现在让我们来检查一下你的代码,因为你有一些“概念性”的错误,因为你并不完全理解你所做的代码。
这是你的代码实际上做了,这是当你得到这样的错误,你应该怎么想的:
sample=[23,44,12,1,6,87]
temp=0
for i in range(0,len(sample)-1):
if sample[i] > sample[i+1]:
temp=sample[i]
sample[i]=sample[i+1]
sample[i+1]=temp
第一行: 你i
将得到的值0,1,2至5 (在这种情况下)。
第二行: 它将检查是否对列表的成员彼此相邻。
它会检查第一个(从左到右)是否大于第二个,它会检查23> 44,这将是错误的,所以它不会执行其余的代码。
否i
将为1,因此您将检查44> 12,这是真实的,因此您的代码将执行并成功交换这两个。
这是学习在python中交换变量而不使用临时变量的流畅方式的好时机。
sample[i], sample[i+1] = sample[i+1], sample[i]
查看更多关于它,谷歌python变量交换,如果你想。
回复原始问题。
您已成功交换44和12,此列表代表[23,12,44,1,6,87]
。
但是,如果你继续这样做,它会:
交换44 1
交换44与6
不会掉44与87
不过这个名单现在将[23,12,1,6,44,87]
并且您的代码将停止执行,因为i
现在是5.
您是否发现了问题?
您需要重新运行几次才能实际订购它,因为它不检查列表是否已组织,而是交换彼此相邻的成员。
所以,如果你(此特定列表)运行:
for j in range(3):
for i in range(0,len(sample)-1):
if sample[i] > sample[i+1]:
sample[i], sample[i+1] =sample[i+1], sample[i]
名单将订购。
排序像列表这样的有序集合是一个很多研究“领域”。
我建议你阅读排序算法,从非常简单的排序算法开始,如泡沫排序,因为这是你的算法(如onatm建议)。
有一些“有趣”的方法来学习这种算法,例如,check this out。
如果您有兴趣,也可以在this上阅读。
This site很好地说明了算法是如何工作到排序列表的。
祝你好运,并请评论,如果您有任何疑问。
快速谷歌搜索将产生许多可能的排序算法。我建议你从那里开始。至少,你的教科书中至少应该有一个。 –
更改范围(0,len(sample))中的i:'to范围内的i(0,len(sample)-1):'。现在你只需要修复你的算法。 –
什么史蒂文说+你的交换逻辑与温度也是错误的,温度永远不会在你的代码中= =的左手边 –