【发布时间】:2022-01-25 15:23:16
【问题描述】:
我正在研究递归算法并且需要一些帮助,所以我来到这里进行了一些挖掘。我发现的东西适用于我想要它做的事情(链接:python minmax using only recursion),但我不明白它为什么以及如何工作。代码如下:
def minMax(A,n):
if A:
header = A[0]
tailend = A[1:]
if tailend != []:
minimum, maximum = minMax(tailend,n-1)
return [header, minimum][minimum < header], [header, maximum][maximum > header]
return header, header
return A
intlist = [30, 50, 20, 70, 10, 80, 25, 100, 60, 40]
print(minMax(intlist,len(intlist)))
我不明白的是这一段:return [header, minimum][minimum header] 括号是如何工作的?据我所知,括号用于切片、列表、索引和排序。但是在这里,似乎有某种关键字在幕后进行,我就是想不通。任何帮助将不胜感激。
【问题讨论】:
-
第一个括号定义了一个包含两个项目的列表,第二个括号是一个布尔值的项目访问,它的值为 0 代表 False 或 1 代表 True。
-
另外:返回列表之间用逗号将它们作为元组返回。
-
if minimum < header: return minimum else: return header的写法既愚蠢又令人困惑(第一部分仅在逗号之前,当然在逗号之后类似)。 -
@9769953 我是一名业余程序员,我总是想知道那些“愚蠢的”编写代码的方法是否只是对加快代码速度、节省内存等有用的东西......
-
@JoséChamorro 有时,他们可能是。在这里,它们可能是一种快捷方式,而不必编写 if-else 语句。但是,当然对于 Python,我认为尝试以这种迟钝的方式尝试加速代码或节省内存是非常无益的(对于确实重要的语言,可能有更好的构造来实现这一点,或者编译器/解释器会比程序员聪明)。
标签: python