Python中的IF条件如何工作?

这是我在网上找到并尝试实施的Mergesort。它起作用了,但是我不确定它如何起作用。有人可以向我解释为什么/如何运行这种前提条件吗?当first-if语句不再为真时,代码在哪里继续。我知道if条件一般如何工作,但是由于缺乏缩进和/或“ else”,这使我感到困惑。

def mergeSort(alist):
   print("Splitting ",alist)
   if len(alist)>1:
       mid = len(alist)//2
       lefthalf = alist[:mid]
       righthalf = alist[mid:]
       #recursion
       mergeSort(lefthalf)
       mergeSort(righthalf)

       i=0
       j=0
       k=0

       while i < len(lefthalf) and j < len(righthalf):
           if lefthalf[i] < righthalf[j]:
               alist[k]=lefthalf[i]
               i=i+1
           else:
               alist[k]=righthalf[j]
               j=j+1
           k=k+1

       while i < len(lefthalf):
           alist[k]=lefthalf[i]
           i=i+1
           k=k+1

       while j < len(righthalf):
           alist[k]=righthalf[j]
           j=j+1
           k=k+1

alist = [54,26,93,17,77,31,44,55,20]
mergeSort(alist)
print(alist)```
lzh050925 回答:Python中的IF条件如何工作?

这依赖于alist像一个全局变量一样有效地起作用,该变量似乎有些皱眉(特别是因为它不是全局变量)。还有一些while循环可以用列表推导代替。

如果if条件不成立,则alist仅具有一个元素,因此对其进行排序是微不足道的:一个元素的排序列表仅是该列表。唯一元素列表不能乱序。因此,该函数无需执行任何操作即可终止,因为不需要任何操作。

如果if条件为true,则函数使用对自身的递归调用重新分配列表中的条目。每次递归都会在较小的列表上调用该函数,因此最终会到达长度为1的列表,从而终止递归。因此,当if条件为false时,该函数将返回到更高一级的递归。

由于可变数据类型(例如列表)在Python中的工作方式,当递归级别更改所传递的alist特定位置中的内容时,它也会更改{{ 1}}较高的递归级别。即使该函数没有alist关键字,因此也不会显式返回任何内容,从而导致原始alist最终被排序。这被称为对输入“就地”操作的函数。

,

在此代码中,没有其他使用-查找匹配的内容,总是寻找从相同位置(具有相同缩进)开始的其他内容,就像。由于没有这样的代码,因此如果不满足条件,它将退出函数。

本文链接:https://www.f2er.com/2997339.html

大家都在问