[英]Bubble sort in Python, what are these arguments for?
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
這是冒泡排序的代碼,但是在while
條件中-1,0,-1
什么用呢?
您正在查看range()
函數的參數; 數字將范圍設置為從列表長度開始,減去 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
等等,直到最后一次,當它從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,因為索引從 0 開始,而不是 1。0 是開始編號(僅需要到達下一個參數)。 第二個 -1 是告訴它在范圍內向后移動的步驟。
示例: range(5, 2, -1) 是 [5, 4, 3]
等於范圍(開始,停止,步驟)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.