我在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)'我稍微更習慣於 –