这行在排序Algo(Bubble示例)中是什么意思


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])

我应该如何解释这行:for i in range(len(array)-1,0,-1)?我对0-1参数的需求特别困惑。

这一行发生了一些事情,我将对此进行简化解释(我假设这段代码是用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的长度减去1
  • 范围的末尾为0
  • 范围正在下降,步长为-1

因此,如果array["fish", "banana", "pineapple", "onion"]len(array)将返回4,因此您将有for i in range(3, 0, -1),它将循环3次,其中i是3,然后是2,然后是1。

这是一个相当简单的答案,所以我建议你找一些关于你不理解的函数的教程。

相关内容

最新更新