我在hackerrank上看到过这样的循环,但我仍然不明白它们是如何工作的。为什么它有一个常数整数'1'?不应该是'我'而不是'1'?任何人都可以向我解释一下。
sum (1 for i in l if i >= a and i <= b)
信用到期的信用。我将这个循环从一个非常优雅的解决方案复制到了Shashwat的问题中。问题是'Sherlock和Squares'在hackerrank算法中用于好奇的算法。
答案 0 :(得分:2)
我不知道你的价值所以我们假设:
>>> l = list(range(10))
>>> a = 4
>>> b = 7
如果您将代码行分解为几个步骤并打印中间结果,则更清楚:
>>> [1 for i in l if i >= a and i <= b]
[1, 1, 1, 1]
这是传递给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
。
答案 1 :(得分:1)
在你的例子中,如果项目大于或等于a且项目小于或等于b,它们基本上为l中的每个项目的变量添加1。
这基本上等于这段代码:
x = []
for i in l:
if i >=a and i <= b:
x.append(1)
sum(x)
答案 2 :(得分:1)
sum (1 for i in l if i >= a and i <= b)
这是做什么的,只有当条件i >= a and i <= b
在迭代l
和i
作为迭代器时才会创建1s的生成器表达式。
然后,sum
将所有1组合在一起。