def bubbleSort(array):
swapped = False
for i in range(len(array)-1,0,-1):
print(i)
for j in range(i):
print(j)
if array[j]>array[j 1]:
array[j], array[j 1] = array[j 1], array[j]
swapped= True
if swapped:
swapped=False
else:
break
print(array)
bubbleSort([5, 2, 1, 3])
這條線做了什么,尤其是末尾的 -1,0,-1 - for i in range(len(array)-1,0,-1):
uj5u.com熱心網友回復:
該行發生了幾件事,我將對其進行簡化解釋(我假設這段代碼是用 Python 撰寫的)。
首先,for i in iterable將遍歷iterable,這意味著 for 回圈中的代碼將重復與 中的元素一樣多的次數iterable,可以是陣列、串列、字串等,并且每次回圈時,i將是 的下一個元素iterable,從第一個開始。比如for i in [1, 2, 3]會回圈3次;第一次,i將等于 1;第二個、2 等。
接下來,該range函式生成一個可迭代的數字范圍,例如從 0 到 9。使用單個引數,range將產生從 0 到該數字的范圍,但在它之前停止,例如range(5)會給你[0, 1, 2, 3, 4]. 因此,如果您要使用for i in range(5),您的代碼將重復 5 次,其中 i 從 0 遞增到 4。
使用兩個引數,范圍將從第一個開始并在第二個之前停止,第二個必須大于第一個。例如,range(3, 8)會給你[3, 4, 5, 6, 7]. range(8, 3)但是,將不起作用,因為開始編號大于停止編號。這意味著您不能僅使用 2 個引數來倒計時。
第三個可選引數range是步長;您希望數字每一步增加或減少多少。例如,range(0, 10, 2)將給您輸出[0, 2, 4, 6, 8],在 10 之前停止。在這里,您可以通過將 step 引數設定為負數來生成遞減范圍。range(10, 0, -2)會給你[10, 8, 6, 4, 2],在第二個引數之前再次停止,并且range(10, 0, -1)會給你完整的[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]。
最后,該len(iterable)函式將為您提供所給內容的長度,或者說串列中包含的專案數。例如len("Hello!")會給你 6,然后len([1, 2, 3, 4, 5])會給你 5。
將所有這些放在一起,該行將for i in range(len(array)-1, 0, -1)執行以下操作:
- 代碼將重復與串列中的專案一樣多的次數,i 取串列中的每個值
- 該串列是一個數字范圍
- 該范圍的起始數字是
array減一的長度 - 范圍的結尾是 0
- 范圍遞減,步長為 -1
因此,如果array是["fish", "banana", "pineapple", "onion"],len(array)將回傳 4,因此您將擁有for i in range(3, 0, -1),它將回圈 3 次,i為 3,然后是 2,然后是 1。
這是一個相當簡化的答案,因此我建議您找到一些有關您不了解的任何功能的教程。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/407404.html
標籤:
