def bbsort(list1):
for passnum in range(len(list1)-1,0,-1):
for i in range (passnum):
if list1[i]>list1[i+1]:
temp =list1[i]
list1[i] = list1[i+1]
list1[i+1] = temp
这是冒泡排序的代码,但-1,0,-1
条件下while
的用途是什么?
答案 0 :(得分:9)
您正在查看range()
function的参数;数字设置范围从列表长度开始减1,然后降低到1(结束点不包括在范围内)。
所以有3个参数,第一个是len(list1) - 1
,第二个是0
,第三个是-1
。
假设列表长度为5,那么range(5 - 1, 0, -1)
将生成一个包含4,3,2和1的列表:
>>> list(range(4, 0, -1))
[4, 3, 2, 1]
for
循环遍历这些值:
>>> for i in range(4, 0, -1):
... print(i)
...
4
3
2
1
for
循环将这些数字分配给passnum
,下一个嵌套循环使用它来创建新的range()
。第一次,内部范围将从0
变为len(list1) - 1
(不包括),下一次从0
到len(list1) - 2
等,直到最后一次,当它& #39;将从0
运行到1
,始终排除停止索引。对于长度为5的列表,这意味着内部循环首先将0,1,2,3分配给i
,然后分配0,1,2,然后分配0,1,然后分配0。
代码缺少使用Python序列分配来交换元素的机会:
def bbsort(list1):
for passnum in range(len(list1) - 1, 0, -1):
for i in range (passnum):
if list1[i] > list1[i + 1]:
list1[i], list1[i + 1] = list1[i + 1], list[i]
答案 1 :(得分:1)
第一个-1从输入列表的长度中减去1,因为索引从0开始,而不是1. 0是起始编号(仅需要到达下一个参数)。第二个-1是步骤,以告诉它在范围内向后移动。 例: 范围(5,2,-1)是[5,4,3,2]