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

时间:2013-04-26 11:13:08

标签: python list while-loop

为真正琐碎的入门级python问题道歉。

目前正在使用Google Python教程并点击一些可能会让我失望的东西 - 如果我没有说明这一点 - 使用和将值作为执行while循环的复合条件。

读取它看起来好像while循环操作,而两个列表的长度都是正数。因此,一旦两个列表的长度== 0,则while循环命中0并终止。

我不确定如何在心理上解析这个问题 - 条件是一旦两个长度== 0然后是和语句和0和0,给出否定条件并终止。

通过我将其解析为'5'和'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

非常感谢。

3 个答案:

答案 0 :(得分:4)

while len(list1) and len(list2):

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

(在布尔上下文中,除FalseNone0""[]之外的任何值都将评估为真。)

答案 1 :(得分:2)

在官方Python文档上引用Built In Types Page

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

此页面上还提到:

  

这是一个短路运算符,所以它只计算第二个参数,如果第一个参数为True

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

答案 2 :(得分:2)

理解这一点的关键是pop声明。

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

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