这三个深表理解是如何工作的?具体来说,house
如何在bisect.bisect(heaters, house)
的范围内?我对生成器的理解是,它们按从左到右的顺序执行,而这段代码位于创建house
的左侧。奖励:如果你能用for循环重写这个。你知道吗
import bisect
houses, heaters = [1,2,3,90, 4],[1,4]
max(min(abs(house - heater)
for i in [bisect.bisect(heaters, house)]
for heater in heaters[i-(i>0):i+1])
for house in houses)
使用
for
循环重写奖励积分。你知道吗表达式有两个不同的生成器表达式。一个在
max
内,有一个for
子句。另一个嵌套在第一个min
调用中,并有两个for
子句。当前代码的缩进显示了它与缩进的关系,但可以更明确:这里可以看到嵌套结构:
max(... for house in houses)
是外部生成器,而min(abs(house-heater) for i in ... for heater in ...)
是内部生成器。你知道吗内部生成器表达式可以引用外部生成器表达式中的迭代器变量
house
(就像(f(x) for x in iterable)
中的函数调用f(x)
引用x
)。你知道吗相关问题 更多 >
编程相关推荐