Подтвердить что ты не робот

Преобразование целого числа в список цифр

Каков самый быстрый и чистый способ преобразования integer в list?

Например, измените 132 на [1,3,2] и 23 на [2,3]. У меня есть переменная, которая является int, и я хочу иметь возможность сравнивать отдельные цифры, поэтому я думал, что сделать ее в списке лучше, поскольку я могу просто сделать int(number[0]), int(number[1]), чтобы легко преобразовать элемент списка обратно в int для операций с цифрами.

4b9b3361

Ответ 1

Сначала преобразуйте целое число в строку, а затем используйте map для применения к нему int:

>>> num = 132
>>> map(int, str(num))    #note, This will return a map object in python 3.
[1, 3, 2]

или используя понимание списка:

>>> [int(x) for x in str(num)]
[1, 3, 2]

Ответ 2

Самый короткий и лучший способ уже ответил, но первое, о чем я думал, было математическим путем, так вот:

def intlist(n):
    q = n
    ret = []
    while q != 0:
        q, r = divmod(q, 10) # Divide by 10, see the remainder
        ret.insert(0, r) # The remainder is the first to the right digit
    return ret

print intlist(3)
print '-'
print intlist(10)
print '--'
print intlist(137)

Это просто еще один интересный подход, вам определенно не нужно использовать такую ​​вещь в практических случаях.

Ответ 3

Используйте list на число, преобразованное в строку:

In [1]: [int(x) for x in list(str(123))]
Out[2]: [1, 2, 3]

Ответ 4

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


Большое количество было использовано (для накладных расходов) 1111111111111122222222222222222333333333333333333333

Используя map(int, str(num)) :

import timeit

def method():
    num = 1111111111111122222222222222222333333333333333333333
    return map(int, str(num))

print(timeit.timeit("method()", setup="from __main__ import method", number=10000)

Выход: 0.018631496999999997

Используя понимание списка:

время импорта

def method():
    num = 1111111111111122222222222222222333333333333333333333
    return [int(x) for x in str(num)]

print(timeit.timeit("method()", setup="from __main__ import method", number=10000))

Выход: 0.28403817900000006

Код взят из этого ответа

Результаты показывают, что первый метод, включающий встроенные методы, намного быстрее, чем понимание списка.

"Математический путь":

import timeit

def method():
    q = 1111111111111122222222222222222333333333333333333333
    ret = []
    while q != 0:
        q, r = divmod(q, 10) # Divide by 10, see the remainder
        ret.insert(0, r) # The remainder is the first to the right digit
    return ret

print(timeit.timeit("method()", setup="from __main__ import method", number=10000))

Выход: 0.38133582499999996

Код взят из этого ответа

Метод list(str(123)) (не обеспечивает правильного вывода):

import timeit

def method():
    return list(str(1111111111111122222222222222222333333333333333333333))

print(timeit.timeit("method()", setup="from __main__ import method", number=10000))

Выход: 0.028560138000000013

Код взят из этого ответа

Ответ Дюберли Гонсалес Молинари:

import timeit

def method():
    n = 1111111111111122222222222222222333333333333333333333
    l = []
    while n != 0:
        l = [n % 10] + l
        n = n // 10
    return l

print(timeit.timeit("method()", setup="from __main__ import method", number=10000))

Выход: 0.37039988200000007

Код взят из этого ответа

Примечания:

Во всех случаях map(int, str(num)) является самым быстрым методом (и, следовательно, вероятно, лучшим методом для использования). Понимание списка занимает второе место (но метод, использующий map(int, str(num)), вероятно, является наиболее желательным из двух.

Те, которые изобретают велосипед, интересны, но, вероятно, не очень желательны в реальном использовании.

Ответ 5

n = int(raw_input("n= "))

def int_to_list(n):
    l = []
    while n != 0:
        l = [n % 10] + l
        n = n // 10
    return l

print int_to_list(n)

Ответ 6

ты можешь использовать:

Сначала преобразуйте значение в строку, чтобы повторить его. Их каждое значение можно преобразовать в целочисленное value = 12345

l = [ int(item) for item in str(value) ]

Ответ 7

Если у вас есть такая строка: "123456", и вы хотите получить список целых чисел, например: [1,2,3,4,5,6], используйте это:

>>>s = '123456'    
>>>list1 = [int(i) for i in list(s)]
>>>print(list1)

[1,2,3,4,5,6]

или если вы хотите получить список строк вроде этого: ['1', '2', '3', '4', '5', '6'], используйте это:

>>>s = '123456'    
>>>list1 = list(s)
>>>print(list1)

['1','2','3','4','5','6']

Ответ 8

>>>list(map(int, str(number)))  #number is a given integer

Возвращает список всех цифр номера.

Ответ 9

Зациклив это можно сделать следующим образом :)

num1= int(input('Enter the number'))
sum1 = num1 #making a alt int to store the value of the orginal so it wont be affected
y = [] #making a list 
while True:
    if(sum1==0):#checking if the number is not zero so it can break if it is
        break
    d = sum1%10 #last number of your integer is saved in d
    sum1 = int(sum1/10) #integer is now with out the last number ie.4320/10 become 432
    y.append(d) # appending the last number in the first place

y.reverse()#as last is in first , reversing the number to orginal form
print(y)

Ответ становится

Enter the number2342
[2, 3, 4, 2]

Ответ 10

num = list(str(100))
index = len(num)
while index > 0:
    index -= 1
    num[index] = int(num[index])
print(num)

Он печатает [1, 0, 0] объект.