Python中的map和sum的str

1 投票
3 回答
6878 浏览
提问于 2025-04-15 14:58

为什么在下面的代码中需要使用' str '这个函数?

我正在尝试计算一个数字中所有数字的总和。

我的代码

for i in number:
    sum(map(int, str(i))

这里的 number 是下面的数组

[7,79,9]

我理解我的代码是这样的

  1. 循环遍历这个数组
  2. 计算每个数字的整数部分的总和
  3. 通过 map 方法逐个获取数字
  4. 这样每个对象(给定的数字)都被转换成字符串 // 这听起来没道理

手册上是这样说的关于 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

撰写回答