对于非常琐碎的入门级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都不为空时,将继续循环;如果任一列表为空,则循环将终止。
(在布尔上下文中,除False
、None
、0
、""
或[]
之外的任何值都将计算为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算法的一部分。其工作原理如下:
- 只要两个列表都包含剩余的元素,就重复以下循环
- 从列表的开头选择较小的元素(即第一个元素(
- 从相应的列表中删除元素,并将其添加到结果列表中
- 重复
- 那么,最多一个列表仍然包含元素。将该列表的其余元素添加到结果中