请解释这个评估为数组的python循环,并且是sum()ed

时间:2016-03-04 21:37:28

标签: python algorithm for-loop

我在hackerrank上看到过这样的循环,但我仍然不明白它们是如何工作的。为什么它有一个常数整数'1'?不应该是'我'而不是'1'?任何人都可以向我解释一下。

sum (1 for i in l if i >= a and i <= b)

信用到期的信用。我将这个循环从一个非常优雅的解决方案复制到了Shashwat的问题中。问题是'Sherlock和Squares'在hackerrank算法中用于好奇的算法。

3 个答案:

答案 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在迭代li作为迭代器时才会创建1s的生成器表达式。

然后,sum将所有1组合在一起。