2024-10-03 09:18:43 发布
网友
我在hackerrank上见过很多这样的循环,但我仍然不明白它们是如何工作的。为什么它有一个常量整数“1”?不应该是“i”而不是“1”吗?谁能给我解释一下吗。你知道吗
sum (1 for i in l if i >= a and i <= b)
信用到期时的信用。我从Shashwat的一个非常优雅的问题解决方案中复制了这个循环。这个问题是“夏洛克和广场”在黑客银行算法的好奇者。你知道吗
在你的例子中,他们基本上是为l中的每一项加1,如果该项大于或等于a,而该项小于或等于b
这基本上等于这个代码:
x = [] for i in l: if i >=a and i <= b: x.append(1) sum(x)
我不知道你的价值观,所以我们假设:
>>> l = list(range(10)) >>> a = 4 >>> b = 7
如果您将代码行分解为几个步骤并打印中间结果,则会更清楚:
>>> [1 for i in l if i >= a and i <= b] [1, 1, 1, 1]
这就是传递给sum的内容。(当您去掉方括号时,它隐式地成为一个生成器,但这是它作为列表的样子。)
sum
如果你不理解理解力,它相当于:
>>> result = [] >>> for i in l: ... if i >= a and i <= b: ... result.append(1) ... >>> result [1, 1, 1, 1]
求和相当于将result = []改为result = 0,将result.append(1)改为result += 1。你知道吗
result = []
result = 0
result.append(1)
result += 1
它要做的是,仅当条件i >= a and i <= b在l和i作为迭代器进行迭代时通过,才创建1的生成器表达式。你知道吗
i >= a and i <= b
l
i
然后,sum将所有1相加。你知道吗
在你的例子中,他们基本上是为l中的每一项加1,如果该项大于或等于a,而该项小于或等于b
这基本上等于这个代码:
我不知道你的价值观,所以我们假设:
如果您将代码行分解为几个步骤并打印中间结果,则会更清楚:
这就是传递给
sum
的内容。(当您去掉方括号时,它隐式地成为一个生成器,但这是它作为列表的样子。)如果你不理解理解力,它相当于:
求和相当于将
result = []
改为result = 0
,将result.append(1)
改为result += 1
。你知道吗它要做的是,仅当条件
i >= a and i <= b
在l
和i
作为迭代器进行迭代时通过,才创建1的生成器表达式。你知道吗然后,
sum
将所有1相加。你知道吗相关问题 更多 >
编程相关推荐