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

Posted

技术标签:

【中文标题】While 循环条件在:复合条件表达式 AND\'d [python]【英文标题】:While loop conditions in: compound conditional expressions AND'd [python]While 循环条件在:复合条件表达式 AND'd [python] 【发布时间】:2013-04-20 13:06:28 【问题描述】:

为真正微不足道的 Python 入门级问题道歉。

目前正在阅读 Google Python 教程,如果我没有确定它可能会绊倒我 - 使用 and'd 值作为执行 while 循环的复合条件。

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

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

通读它,我将它解析为 while '5' 和 '6' (例如,如果 5 和 6 是列表的长度)。到目前为止,我还没有遇到过以这种方式使用 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

非常感谢。

【问题讨论】:

【参考方案1】:
while len(list1) and len(list2):

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

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

【讨论】:

啊,太好了。谢谢 - 所以它是有效的: 1 和 1 = 1、0 和 1 = 0、0 和 0 = 0 一旦它遇到评估为 0 的东西,它就会终止。非常感谢您的宝贵时间。【参考方案2】:

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

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

在此页面上进一步提到:

这是一个短路操作符,所以它只在第一个参数为真时计算第二个参数

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

以上是关于While 循环条件在:复合条件表达式 AND'd [python]的主要内容,如果未能解决你的问题,请参考以下文章

java介绍while循环

C Primer Plus 第六章 C控制语句:循环

求C语言中循环的具体用法

while循环

while循环的条件写1代表啥意思?

while循环