【发布时间】:2021-11-12 09:44:51
【问题描述】:
我正在做这个问题:
给定一个整数数组 arr,幸运整数是一个整数,它在数组中的频率等于它的值。 返回数组中的幸运整数。如果有多个幸运整数,则返回其中最大的一个。如果没有幸运整数返回-1。
我正在使用此代码,该代码有效并通过了所有测试:
class Solution:
def findLucky(self, arr: List[int]) -> int:
values = [n for n in arr if n if arr.count(n) == n]
return max(values) if values else -1
但是,当我尝试将列表理解更改为生成器表达式时:
class Solution:
def findLucky(self, arr: List[int]) -> int:
values = (n for n in arr if n if arr.count(n) == n)
return max(values) if values else -1
我收到此错误:
Traceback (most recent call last):
File "...", line 10, in <module>
print(Solution().findLucky([2, 3, 4]))
File "...", line 7, in findLucky
return max(values) if values else -1
ValueError: max() arg is an empty sequence
为什么列表推导有效,而生成器表达式失败?
我已尝试将生成器表达式转换为推导式中的列表,但这不起作用,因为生成器已经过时了。
【问题讨论】:
-
生成器总是真实的,无论它是否会产生任何值。
标签: python list-comprehension generator-expression