Наша задача состоит в том, чтобы разбить определенное число на отдельные цифры. Предположим, что у нас есть число 987654321. Нам нужно разделить его на цифры и сохранить их как отдельные целочисленные значения.
В Python есть несколько способов решить эту задачу. Разберем их все по порядку.
БЕСПЛАТНО СКАЧАТЬ КНИГИ по Python на русском языке можно у нас в телеграм канале "Python книги на русском"
Как разбить число на цифры при помощи map()
Функция map()
принимает в качестве аргументов определенную функцию и итерируемый объект (список, кортеж и т.д. ) и применят эту функцию к каждому элементу объекта.
Давайте рассмотрим следующее выражение:
mapObject = map(int, string_num)
Здесь:
string_num
– списокint
– функция, которая преобразует каждый элемент списка в целое числоmapObject
– переменная, в которую сохранен объект функцииmap()
;
В следующем примере показана работа функции map()
в задаче разделения числа на отдельные цифры.
giveNumber = 987654321 string_num = str(giveNumber) mapObject = map(int, string_num) separate_digit_list = list(mapObject) print(separate_digit_list) # Результат: # [9, 8, 7, 6, 5, 4, 3, 2, 1]
Объяснение:
- Сначала преобразуем наше число в строку при помощи встроенной функции
str()
, чтобы передать его в функциюmap()
в качестве итерируемого объекта - Функция
map()
применяет функциюint()
к каждому элементу строки - Функция
list()
преобразует объект функцииmap()
в искомый список отдельных цифр, из которых состоит наше число.
Как разбить число на цифры при помощи цикла for
number = 987654321 for n in str(number): # print(type(n)) # Если раскомментировать, эта строка будет выводить <type 'str'> print(int(n)) # Преобразуем символ строки обратно в число
Результат:
9 8 7 6 5 4 3 2 1
Объяснение. Нам дано число 987654321. Для перебора цифр, составляющих это число, его надо преобразовать в строку (итерируемый объект). Тип каждого элемента мы можем выводить в консоль при помощи выражения print(type(n))
.
Некоторые могут задаться вопросом: а что если перебрать непосредственно само число, не преобразуя его в строку? Мы можем попробовать это сделать в следующем примере:
number = 987654321 for n in number: print(int(n)) # Результат: # TypeError: int object is not iterable
В результате работы цикла for
происходит ошибка: объект типа int
не является итерируемым. Поэтому перед перебором цифр число сначала нужно преобразовать в строку. Все элементы этой строки являются символами (строчного типа). Для получения числовой последовательности нам придется преобразовать их в целые числа при помощи встроенной функции int()
.
Как разделить число на цифры при помощи генератора списка
Генераторы списков (list comprehension) в Python предоставляют мощный функционал для написания результативного кода в одну строчку.
Мы уже рассмотрели пример кода, демонстрирующий разбиение числа на цифры с помощью цикла for
. Теперь мы перепишем ту же программу при помощи генератора списка.
givenNumber = 987654321 charterList = [receivedDigit for receivedDigit in str(givenNumber)] print(charterList) # Результат: # ['9', '8', '7', '6', '5', '4', '3', '2', '1']
Объяснение:
- Сохраняем наше число как строку
- Генератор списка разбивает строку на отдельные цифры
- Сохраняем полученный список в переменную
charterList
и выводим его на печать
В результате мы получили список символов (типа str), а не чисел, как хотели бы, верно? Чтобы это исправить, нужно просто добавить функцию int()
в наш генератор списка:
givenNumber = 987654321 charterList = [int(receivedDigit) for receivedDigit in str(givenNumber)] print(charterList) # Результат: # [9, 8, 7, 6, 5, 4, 3, 2, 1]
Здесь int(receivedDigit)
преобразует каждый символ в число (типа int), а полученный результат становится списком целых чисел, как нам и хотелось. Таким образом мы можем разбить на цифры двузначное, трехзначное, четырехзначное число и так далее.
Как разделить число на цифры при помощи цикла for и функции list()
Приведенный ниже код иллюстрирует применение функции append()
для сбора цифр из заданного числа в список:
number = 987654321 result = [] for n in str(number): result.append(int(n)) print(result) # Результат: # [9, 8, 7, 6, 5, 4, 3, 2, 1]
Объяснение:
- Перед началом цикла создаем пустой список
result = []
- Для преобразования каждого элемента из строкового типа в целочисленный используем функцию
int()
- Добавляем полученное целочисленное значение в наш список в переменной
result
Перевод статьи “Split Number Into Digits in Python”.
Пингбэк: Как посчитать, сколько цифр в числе - pythonturbo