Python中的map和sum的str
为什么在下面的代码中需要使用' str '这个函数?
我正在尝试计算一个数字中所有数字的总和。
我的代码
for i in number:
sum(map(int, str(i))
这里的 number 是下面的数组
[7,79,9]
我理解我的代码是这样的
- 循环遍历这个数组
- 计算每个数字的整数部分的总和
- 通过 map 方法逐个获取数字
- 这样每个对象(给定的数字)都被转换成字符串 // 这听起来没道理
手册上是这样说的关于 str
Type: type
Base Class: <type 'type'>
String Form: <type 'str'>
Namespace: Python builtin
Docstring:
str(object) -> string
Return a nice string representation of the object.
If the argument is a string, the return value is the same object.
3 个回答
2
如果你不使用 str()
来运行那段代码,会发生什么呢?
str()
的作用是把一个整数转换成一串字符,这样 map()
就可以逐个处理这些字符。这里的重点是,"字符串"可以看作是一串字符的集合。
2
为什么在下面的代码中需要使用函数 'str'?
因为 map 函数需要一个可迭代的对象,比如列表、元组或者字符串。
这段代码的目的是把一个整数里的所有数字加起来。它用了一点小技巧,通过将数字转换成一串数字来实现。
map(int, str(i))
这段代码会把整数 2009 转换成列表 [2, 0, 0, 9]。然后 sum() 函数会把这些数字加起来,结果是 11。
还有一种不那么“技巧”的写法是:
>>> number = [7,79,9]
>>> for i in number:
... result = 0
... while i:
... i, n = divmod(i, 10)
... result +=n
... print result
...
7
16
9
不过,你的写法确实更聪明一些。
8
给定一个数字 79
,你需要把它变成 [7, 9]
这样一个列表,以便对这个列表进行求和。
那么,把一个数字拆分成数字是什么意思呢?这就是把这个数字用某种进制的数字系统来表示(在这个例子中是十进制,也就是基数 10
)。比如说,79
可以表示成 7 * 10**1 + 9 * 10**0
。
那在这个情况下,获取一个数字的这种表示方式最简单的方法是什么呢?就是把它转换成一个字符串,表示成十进制的形式!
你的代码正是这样做的:
>>> str(79)
'79'
# Another way to say this is [int(c) for c in str(79)]
>>> map(int, str(79))
[7, 9]
>>> sum(map(int, str(79)))
16