Преобразование целого числа в список цифр
Каков самый быстрый и чистый способ преобразования integer
в list
?
Например, измените 132
на [1,3,2]
и 23
на [2,3]
. У меня есть переменная, которая является int
, и я хочу иметь возможность сравнивать отдельные цифры, поэтому я думал, что сделать ее в списке лучше, поскольку я могу просто сделать int(number[0])
, int(number[1])
, чтобы легко преобразовать элемент списка обратно в int для операций с цифрами.
Ответы
Ответ 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]
объект.