试图了解Python地图

3 python

我以前没有真正使用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)))
Run Code Online (Sandbox Code Playgroud)

所以我理解地图在数字迭代中应用相同的函数,但是什么throws me off is the int,str(...) part.我不确定幕后会发生什么.

jpp*_*jpp 5

这里使用了两个数学运算符:

  • // 表示地板划分,即在划分后提取结果的整数部分.
  • % 表示模数,即除法后的余数.

因此,对于n = 808,算法返回:

str(808 // 60 * 100 + 808 % 60) = str(13 * 100 + 28) = '1328'
Run Code Online (Sandbox Code Playgroud)

map(int, '1328')然后获取字符串中的每个字符'1328'并将其转换为整数,本身返回一个可迭代的.map需要一个iterable作为其第二个(和后续)参数.可以迭代字符串以一次提取一个字符.

最后,sum获取从中返回的每个整数map并将它们相加.

通过sum生成器表达式可以实现逻辑的等效公式:

sum(int(i) for i in str(n // 60 * 100 + n % 60))
Run Code Online (Sandbox Code Playgroud)

  • 为了澄清`map`的行为,它期望一个iterable作为第二个参数.字符串表现为包含单个字符的列表. (3认同)