> 这是怎么回事..
Code-1
def first_last6(nums):
if nums[0]==6 or nums[len(nums)-1] == 6:
return True
else:
return False
Code-2
def first_last6(nums):
return (nums[0]==6 or nums[-1]== 6)
怎么两个都是真的?
Code-1
def first_last6(nums):
if nums[0]==6 or nums[len(nums)-1] == 6:
return True
else:
return False
Code-2
def first_last6(nums):
return (nums[0]==6 or nums[-1]== 6)
怎么两个都是真的?
里面似乎有两个问题,所以我都会回答。
首先,为什么都nums[len(nums)-1]
和nums[-1]
一样?指定索引时,Python 允许您使用负数,其解释如下:如果i
innums[i]
为负数,则len(nums)+i
返回索引。因此,基本上,[-1]
将获得最后一个元素,[-2]
倒数第二个等。
第二个问题是为什么这两种格式是相同的:
if expression:
return True
else
return False
和
return expression
expression
在这种情况下是一个返回布尔类型的表达式,所以True
or 或False
. if
声明准确地检查了这一点;如果表达式等于 true,它将返回 true,否则(如果表达式等于 false)它将返回 false。
因此,您可以(并且应该为了使其更简洁)只返回表达式本身,因为它已经是真或假。
如果情况expression
本身不是布尔表达式,if 语句仍将检查它将评估的布尔类型(例如,非空字符串将为真,或者 0 以外的数字也为真)。为了保持简短的语法,您可以使用bool(expression)
, 如评论中提到的 larsmans 显式地将表达式转换为布尔值。
嗯,因为两者完全相同,并且它们都评估为 True。
nums[-k] 是 nums[len(nums)-k] 的简写。要获得第 k 个最后一个元素,请使用符号 nums[-k]。通常很清楚符号代表什么,编译器知道如何将 python 代码转换为机器代码,这就是为什么某些语言结构是可能的而其他语言结构是不可能的。其他短手包括 nums[:k] 来获取前 k 个元素, nums[:-k] 来获取所有元素直到第 k 个最后一个元素等。通过 google、python 文档,您会找到更多关于此的信息。列表操作是 Python 的一大优势。