簡體   English   中英

試圖了解Python地圖

[英]Trying to understand Python maps

在我的編程經驗之前,我還沒有真正使用過maps ,所以我無法理解更complex versions of maps 所以讓我們說問題是你得到一個整數分鍾,在這種情況下n = 808 你用這個號碼做的是把它轉換成24 hour time ,所以hh:mm 這會給你13:28 完成此操作后,將該時間的數字相加以獲得答案。 所以, answer would be 14 我看到了這個解決方案的一個非常好的單行,我試圖理解它,因為我的解決方案需要大約5 more lines of code

這是解決方案:

sum(map(int, str(n // 60 * 100 + n % 60)))

所以我理解地圖在數字迭代中應用相同的函數,但是throws me off is the int,str(...) part 我不確定幕后會發生什么。

這里使用了兩個數學運算符:

  • //表示分割,即分割后提取結果的整數部分。
  • %表示模量,即除法后的余數。

因此,對於n = 808 ,算法返回:

str(808 // 60 * 100 + 808 % 60) = str(13 * 100 + 28) = '1328'

map(int, '1328')然后獲取字符串'1328'中的每個字符並將其轉換為整數,它本身返回一個可迭代的。 map需要一個iterable作為其第二個(和后續)參數。 可以迭代字符串以一次提取一個字符。

最后, sum獲取從map返回的每個整數並將它們加在一起。

通過與生成器表達式sum ,可以得到邏輯的等效公式:

sum(int(i) for i in str(n // 60 * 100 + n % 60))

如你所說, map可以在一個iterable上應用一個函數。

所以,當你這樣做的時候

map(int, str(n // 60 * 100 + n % 60))

您在iterable str(n // 60 * 100 + n % 60)上使用了int函數str(n // 60 * 100 + n % 60) 您可能知道,字符串是可迭代的(因為,當然,您可以迭代它們) - 可以輕松檢查

for char in "abcd":
    print(char)

a
b
c
d

str(n // 60 * 100 + n % 60)的回報是'1328' int應用於每個char時,將每個char轉換為整數。 你可以很容易地看到這一點,而不是立即拿走sum ,得到一個lsit

list(map(int, str(n // 60 * 100 + n % 60)))

[1, 3, 2, 8]

我想現在很容易看到sum將得到這些數字的總和,這是你想從一開始:)

int()str()都是函數。 在該特定示例中,當n=808時, str()函數的參數被計算為1328,其在轉換為字符串時變為'1328' 字符串是可迭代的,因此map函數只是將int應用於字符串的每個字符,從而生成序列[1,3,2,8]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM