我在hackerrank上看到过很多像这样的循环,但我仍然不明白它们是如何工作的。为什么它有一个常量整数'1'?它不应该是'我'而不是'1'吗?任何人都可以向我解释这一点。请解释这个计算为数组的python循环,并且是sum()ed
sum (1 for i in l if i >= a and i <= b)
信贷到期的贷方。我将这个循环从一个非常优雅的解决方案复制到Shashwat的一个问题。问题在于“夏洛克和方形”在hackerrank算法中是好奇的。
我在hackerrank上看到过很多像这样的循环,但我仍然不明白它们是如何工作的。为什么它有一个常量整数'1'?它不应该是'我'而不是'1'吗?任何人都可以向我解释这一点。请解释这个计算为数组的python循环,并且是sum()ed
sum (1 for i in l if i >= a and i <= b)
信贷到期的贷方。我将这个循环从一个非常优雅的解决方案复制到Shashwat的一个问题。问题在于“夏洛克和方形”在hackerrank算法中是好奇的。
在你的例子中,如果项目大于或等于a且项目小于或等于b,则他们基本上为l中的每个项目添加1。
这基本上等于该代码:
x = []
for i in l:
if i >=a and i <= b:
x.append(1)
sum(x)
sum (1 for i in l if i >= a and i <= b)
这是什么做的,是要创建仅当条件i >= a and i <= b
通行证在遍历l
和i
是你1S的生成器表达式迭代器。
然后,sum
将所有的1加在一起。
我不知道你的价值,从而让我们假设:
>>> 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
。
试着将其分解为两个步骤并将中间结果打印到终端或解释器中。 'list_to_sum = [1 for i in l if i> = a and i <= b]'这就是传递给'sum'的东西。 –
它正在计数符合该条件的列表元素。如果这对你更有意义,你可以将其重写为'sum(bool(a <= i <= b)for i in l)'。 – dawg
'sum(1,如果a <= i <= b)'我稍微更习惯于 –