Расщепление целого числа в Python? - PullRequest
55 голосов
/ 15 декабря 2009

Мой целочисленный ввод: 12345, я хочу разбить его и поместить в массив как 1, 2, 3, 4, 5. Как я смогу это сделать?

Ответы [ 9 ]

96 голосов
/ 15 декабря 2009
>>> [int(i) for i in str(12345)]

[1, 2, 3, 4, 5]
71 голосов
/ 15 декабря 2009

возвращает массив в виде строки

>>> list(str(12345))
['1', '2', '3', '4', '5']

возвращает массив как целое число

>>> map(int,str(12345))
[1, 2, 3, 4, 5]
9 голосов
/ 15 декабря 2009
[int(i) for i in str(number)]

или, если вы не хотите использовать понимание списка или вы хотите использовать базу, отличную от 10

from __future__ import division # for compatibility of // between Python 2 and 3
def digits(number, base=10):
    assert number >= 0
    if number == 0:
        return [0]
    l = []
    while number > 0:
        l.append(number % base)
        number = number // base
    return l
2 голосов
/ 15 декабря 2009

как @nd говорит, но используя встроенную функцию int для преобразования в другую базу

>>> [ int(i,16) for i in '0123456789ABCDEF' ]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

>>> [int(i,2) for i in "100 010 110 111".split()]
[4, 2, 6, 7]

Я не знаю, какова конечная цель, но взгляните также на десятичный модуль python для выполнения таких вещей, как

>>> Decimal('3.1415926535') + Decimal('2.7182818285')
Decimal('5.85987')
1 голос
/ 15 декабря 2009

Строки так же итерируемы, как и массивы, поэтому просто преобразуйте их в строку:

str(12345)
0 голосов
/ 12 ноября 2018

Может быть join + split:

>>> a=12345
>>> list(map(int,' '.join(str(a)).split()))
[1, 2, 3, 4, 5]
>>> [int(i) for i in ' '.join(str(a)).split()]
[1, 2, 3, 4, 5]
>>> 

str.join + str.split - ваш друг, также мы используем map или list comprehension, чтобы получить список (разделите то, что мы присоединяем: -)).

0 голосов
/ 31 октября 2018

Хотя list(map(int, str(x))) является подходом Pythonic, вы можете сформулировать логику для получения цифр без преобразования типов:

from math import log10

def digitize(x):
    n = int(log10(x))
    for i in range(n, -1, -1):
        factor = 10**i
        k = x // factor
        yield k
        x -= k * factor

res = list(digitize(5243))

[5, 2, 4, 3]

Одним из преимуществ генератора является то, что вы можете без проблем подавать set, tuple, next и т. Д. Без дополнительной логики.

0 голосов
/ 25 января 2018

Разделение одного числа на его цифры (как ответили все):

>>> [int(i) for i in str(12345)]
[1, 2, 3, 4, 5]

Но, чтобы получить цифры из списка номеров:

>>> [int(d) for d in ''.join(str(x) for x in [12, 34, 5])]
[1, 2, 3, 4, 5]

Поэтому хотелось бы знать, если мы сможем сделать выше, более эффективно.

0 голосов
/ 21 июля 2014

в соответствии с предыдущими ответами, строки являются итеративными, поэтому, если вам нужен список ваших цифр, вы можете добавить его один за другим, используя:

digits = []
digits += str(12345)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...