了解返回值[0,size-1] [nums [0] <nums [size-1]] in =“” python =“”

时间:2019-05-08 04:23:51

标签: python list

=“”

在处理一个简单的编码问题,编写函数findPeakElement时,我遇到了以下代码:

def findPeakElement(self, nums):
     size = len(nums)
     for x in range(1,size-1):
         if nums[x] > nums[x-1] and nums[x] > nums[x+1]:
            return x

     return [0,size-1][nums[0]<nums[size-1]]

最后一行是什么意思?

2 个答案:

答案 0 :(得分:9)

最后一行是写if then else表达式的晦涩方式。

  • [0, size-1]创建两个元素的列表。
  • nums[0] < nums[size-1]返回TrueFalse
  • 当用作列表索引时,此True/False被隐式转换为10
  • 然后,从列表中选择size-10

一种更清晰的书写方式是:

return size - 1 if nums[0] < nums[size - 1] else 0

答案 1 :(得分:5)

第一组方括号构成一个列表,第二组方括号索引该列表。

[0,size-1][nums[0]<nums[size-1]]
^^^^^^^^^^
# constructs a list

[0,size-1][nums[0]<nums[size-1]]
          ^^^^^^^^^^^^^^^^^^^^^^
          # indexes the list

例如,假设nums = [1, 2, 3, 4]。然后size = 4。构造好的列表将是

[0, size-1] == [0, 3]

鉴于上面的列表nums,第二组括号的计算结果为

nums[0] < nums[size-1]    ==    1 < 4
                          ==    True

...这将为列表编制索引

[0, size-1][True]    ==    size-1

在某些圈子中,它是一种模拟高尔夫if语句的代码搜寻技术。简而言之,它大约等同于

if nums[0] < nums[size - 1]:
    return size - 1
else:
    return 0

这仅等效于 ,因为在构造列表时会同时评估标记0size-1。但是它们不带有if语句。

例如:

print([0, 1/0][0])

将在程序到达该行时引发错误。但是...

if 0:
    print(1/0)
else:
    print(0)

仅当程序执行print(1/0)时,以上内容才会引发错误。