有谁知道两个相邻的括号在 python 中有什么作用(例如:[][],[][])



我正在研究递归算法,需要一些帮助,所以我来到这里做了一些挖掘。我发现的东西适用于我想要它做的事情(链接:仅使用递归的python minmax),但我不明白它为什么以及如何工作。这是代码:

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)))

我不明白的是这块:返回[标题,最小][最小<标题],[标题,最大值][最大值>标题]括号如何工作?据我所知,括号用于切片、列表、索引和排序。但在这里,似乎有某种关键字从幕后进行,我只是想不通。任何帮助将不胜感激。

您有一个下标[]的列表[1,2,3][0]

如果运行minimun < header并且minumunheader都已明确定义,则输出将是布尔TrueFalse

现在,在 Python 中:

0=False
1=True

事情就是这样。

因此,您将获得列表中的元素 0 或 1。

正如@csjh所指出的,您的"返回"会将一系列由逗号分隔且没有进一步规范的值解释为元组。

因此,您获得每个列表的元素 0 或 1,并且您以len2 的元组形式获取该信息:

(element_1,element_2)

不是解释,而是将其编写为单行代码的一种更 Python(但仍然迟钝)的方法是:

return header if minimum > header else minimum, header if maximum < header else maximum

它使用 Python 的三元 if-else 表达式的变体。

为了更明确,你可以简单地写

if minimum > header:
a = header
else:
a = minimum
if maximum < header:
b = header
else:
b = maximum
return (a, b)

或使用三元表达式:

a = header if minimum > header else minimum
b = header if maximum < header else maximum
return (a, b)

在我看来,这使代码保持合理简短,同时仍然比原始代码清晰得多。


当然,以上都是错误的,但可能更接近原始陈述。这是你(真的)应该做的:

return min(minimum, header), max(maximum, header)

它显示了实际意图,并且比任何其他编写方式都短得多。(它可能忽略了练习的实际目的,所以有点断章取义。

[minimum < header]

是列表的索引。由于索引应该是整数,因此[minimum < header]被强制为整数。False0True1.因此,如果minimum小于header,则返回minimum,因为它是索引1处的元素。否则,header将返回。这是一种获得min([header, minimum])的奇特方式。我不确定写这篇文章的人只是在炫耀还是忘记了min.

相关内容

最新更新