while 循环条件:复合条件表达式 AND'd [python]



对于非常琐碎的入门级python问题表示歉意。

目前正在学习Google Python教程,如果我不确定的话,可能会遇到一些问题——使用和'd值作为执行while循环的复合条件。

通读它看起来就像while循环在两个列表的长度都为正的情况下运行一样。因此,一旦两个列表的长度都==0,while循环就会达到0并终止。

我不确定如何在心理上解析这一点——条件是否是,一旦两个长度都==0,则and语句为0和0,给出一个否定条件并终止。

通读一遍,我将其解析为"5"one_answers"6"(例如,如果5和6是列表的len(。到目前为止,我还没有遇到过以这种方式使用while循环的情况(只使用了一天左右(。

我不明白的代码位(抽象行(

while len(list1) and len(list2):

上下文中的代码

def linear_merge(list1, list2):
  result = []     
  while len(list1) and len(list2):
    if list1[0] < list2[0]:
      result.append(list1.pop(0))
    else:
      result.append(list2.pop(0))    
  result.extend(list1)
  result.extend(list2)
  return result

谢谢。

while len(list1) and len(list2):

当list1和list2都不为空时,将继续循环;如果任一列表为空,则循环将终止。

(在布尔上下文中,除FalseNone0""[]之外的任何值都将计算为true。(

引用Python官方文档中的内置类型页面:

x and y根据:if x is false, then x, else y 给出结果

本页进一步提到:

这是一个短路运算符,因此只有当第一个参数为True 时,它才会评估第二个参数

所以在你的问题中,它首先评估len(list1(。如果为正,则第一个条件为True,然后计算第二个条件。如果这也是True(即len(list2(>=1(,则进入循环。虽然从根本上讲,它是一个AND操作,但它的不同之处在于,如果第一个条件为False,我们不需要评估第二个条件。在某些情况下,当第二个条件可能涉及耗时的计算时,这可能非常有用。

理解这一点的关键是pop语句。

基本上,该函数将两个已经排序的列表合并为一个列表,其中包含两个列表的所有元素。它是mergesort算法的一部分。其工作原理如下:

  • 只要两个列表都包含剩余的元素,就重复以下循环
    • 从列表的开头选择较小的元素(即第一个元素(
    • 从相应的列表中删除元素,并将其添加到结果列表中
    • 重复
  • 那么,最多一个列表仍然包含元素。将该列表的其余元素添加到结果中

最新更新