Разделите число на цифры и сохраните их в списке (массиве), используя python - PullRequest
2 голосов
/ 18 августа 2011

Я хочу разделить число на цифры и сохранить их в списке (или массиве) в python.Поэтому сначала я должен создать список типа

dig = [0 for i in range(10)]

, а затем

i = 0
while num > 9:
    dig[i] = num % 10
    i += 1
    num /= 10
dig[i] = num

Но мне не очень нравится просто создавать список для 10 пробелов, можно ли получить длину числа безповторяющийся цикл

i = 0
num2 = num
while num2 > 9:
    num2 /= 10
    i += 1
i += 1

, а затем повторить первую часть кода?Или просто сделать, как я сделал в первую очередь?Я не знаю точную длину номера, но он не будет очень длинным

Итак, какие советы?Может быть, вы знаете лучший способ разделить числа на цифры, или, может быть, что-то еще.

Ответы [ 3 ]

10 голосов
/ 18 августа 2011

Так как вы просто добавляете цифры от наименьшего к наибольшему по порядку, просто используйте пустой список:

dig = []
i = 0
while num > 9:
    dig.append(num % 10)
    i += 1
    num /= 10
dig.append(num)

В качестве альтернативы просто сделайте

dig = list(int(d) for d in str(num))

, который превратится в123 в '123', затем превратите каждую цифру обратно в число и поместите их в список, в результате чего [1, 2, 3].

Если вы хотите, чтобы она была в том же порядке, что и ваша версия, используйте

dig = reversed(int(d) for d in str(num))

Если вы действительно хотите получить длину числа, проще всего сделать len(str(num)), который превращает его в строку, а затем получает длину.

5 голосов
/ 18 августа 2011

Предполагая, что num является положительным целым числом, количество цифр равно int(math.log10(num) + 1).

Но лучше просто использовать append метод list - тогда вам не нужно будет заранее знать длину.

Еще проще (хотя список будет в обратном порядке):

dig = [int(x) for x in str(num)]

или

dig = map(int, str(num))
2 голосов
/ 18 августа 2011

Хотя map часто называют непифоническим, эта задача определенно для него:

>>> d = 123456
>>> map(int, str(d))
[1, 2, 3, 4, 5, 6]
...