[英]Can someone explain to me how this function using sum works?
def no_six_in_range(start, end):
print(sum('6' not in str(i) for i in range(start, end + 1)))
no_six_in_range(6, 12)
“sum() function 返回一個數字,即可迭代對象中所有項目的總和。”
所以我的問題是,當 sum 將 iterables 加在一起時,sum 在這個等式中如何工作。 但是當你運行代碼時,它給出的數字比給定的數字要小。 如果有人可以向我解釋這一點,將不勝感激。
這只是計算沒有任何數字"6"
的數字。 請注意,此處的可迭代對象是expr_a for expr_b in expr_c
。 此處求和的值 ( expr_a
)
'6' not in str(i)
是bool
值( True
或False
)。 bool
是int
的子類,因此對它們求和就是對一堆1
和0
求和。
比較例如:
>>> True + True
2
如果你運行這段代碼:
def no_six_in_range(start, end):
print(list('6' not in str(i) for i in range(start, end + 1)))
no_six_in_range(6, 12)
你得到:
[False, True, True, True, True, True, True]
所以,如果你把它們相加,你會得到 6,因為每個 True 是 1,False 是 0
根據 python 文檔,
5.1.3. 列表推導 列表推導提供了一種創建列表的簡潔方法。 常見的應用是創建新列表,其中每個元素都是應用於另一個序列或可迭代對象的每個成員的某些操作的結果,或者創建滿足特定條件的那些元素的子序列。
列表理解評估為一個列表,就像求和函數狀態一樣,是一個可迭代的。
語法一般是:
l = [ iterator for iterator in iterable ]
例如:
my_list_comprehension = [ i for i in range(10) ]
請注意,第一個可迭代對象和第二個可迭代對象可以不同,因此 [a for a in ARRAY] 和 [b for a in ARRAY] 都可以工作,只要定義了 b
在這種情況下,代碼實際上使用了生成器理解,它生成生成器而不是列表。 生成器也可以迭代。 生成器理解的語法與列表的語法相同,只是 [] 替換為 ()。
所以
'6' not in str(i) for i in range(start, end + 1)
當我經過range(start, end + 1) 時,將('6' 不在 str(i) 中)附加到生成器
正如其他答案所解釋的那樣,您可以打印出 arguments 來弄清楚發生了什么,如下所示:
最后,布爾數組通過求和轉換為整數,然后相加。
python 中有關發電機的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.