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都不为空时会继续循环;如果任一列表为空,则循环将终止。
(在布尔上下文中,除False
、None
、0
、""
或 []
之外的任何值都将评估为 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]的主要内容,如果未能解决你的问题,请参考以下文章