Str в карте Питона и сумма - PullRequest
1 голос
/ 10 октября 2009

Зачем вам нужно использовать функцию 'str' в следующем коде?

Я пытаюсь посчитать сумму цифр в номере.

Мой код

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

, где число - следующий массив

[7,79,9]

Я прочитал мой код следующим образом

  1. цикл через массив такой, что
  2. сумма подсчета целых цифр
  3. , получая данные цифры в номере map всё
  4. так, что каждый объект (номер) конвертируется в строку // Это не имеет смысла

Руководство говорит это для ул

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 ]

8 голосов
/ 10 октября 2009

Учитывая 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
2 голосов
/ 10 октября 2009

Зачем вам нужно использовать функцию 'str' в следующем коде?

Поскольку карта принимает итеративный список, или кортеж, или строку.

Данный код добавляет все числа в целое число. И это делает это немного умным взломом. Он преобразует число в последовательность чисел, выполнив

map(int, str(i))

Это преобразует целое число 2009 в список [2, 0, 0, 9]. Затем сумма () добавляет все эти целые числа вверх, и вы получите 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

Но ваша версия, по общему признанию, более умна.

2 голосов
/ 10 октября 2009

Что произойдет, если вы попробуете этот код без использования str()?

str() используется для преобразования целого числа в последовательность символов, так что map() может выполнять итерацию по последовательности. Ключевым моментом здесь является то, что «строка» может рассматриваться как «последовательность символов».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...