Quel est le moyen le plus rapide et le plus propre de convertir une integer
en une list
?
Par exemple, remplacez 132
par [1,3,2]
et 23
par [2,3]
. J'ai une variable qui est une int
, et je veux pouvoir comparer les chiffres individuels, donc je pensais qu'il serait préférable de la transformer en liste, puisque je peux simplement faire int(number[0])
, int(number[1])
pour convertir facilement l'élément de liste en int pour opérations sur les chiffres.
Convertissez d'abord l'entier en chaîne, puis utilisez map
pour appliquer int
dessus:
>>> num = 132
>>> map(int, str(num)) #note, This will return a map object in python 3.
[1, 3, 2]
ou en utilisant une compréhension de liste:
>>> [int(x) for x in str(num)]
[1, 3, 2]
Le moyen le plus court et le meilleur est déjà répondu, mais la première chose à laquelle j'ai pensé était le mode mathématique, alors voici:
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)
C'est juste une autre approche intéressante, vous n'avez certainement pas à utiliser une telle chose dans des cas d'utilisation pratiques.
Utilisez list
sur un nombre converti en chaîne:
In [1]: [int(x) for x in list(str(123))]
Out[2]: [1, 2, 3]
Il existe déjà d'excellentes méthodes déjà mentionnées sur cette page, mais il semble un peu obscur quant à son utilisation. J'ai donc ajouté quelques mesures afin que vous puissiez plus facilement décider par vous-même:
Un grand nombre a été utilisé (pour le temps système) 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)
Sortie: 0.018631496999999997
temps d'importation
def method():
num = 1111111111111122222222222222222333333333333333333333
return [int(x) for x in str(num)]
print(timeit.timeit("method()", setup="from __main__ import method", number=10000))
Sortie: 0.28403817900000006
_ {Code pris de cette réponse
Les résultats montrent que la première méthode impliquant des méthodes incorporées est beaucoup plus rapide que la compréhension par liste.
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))
Sortie: 0.38133582499999996
_ {Code pris de cette réponse
list(str(123))
(ne fournit pas le bon résultat):import timeit
def method():
return list(str(1111111111111122222222222222222333333333333333333333))
print(timeit.timeit("method()", setup="from __main__ import method", number=10000))
Sortie: 0.028560138000000013
_ {Code pris de cette réponse
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))
Sortie: 0.37039988200000007
_ {Code pris de cette réponse
Dans tous les cas, la fonction map(int, str(num))
est la méthode la plus rapide (et est donc probablement la meilleure méthode à utiliser). La compréhension de liste est la deuxième plus rapide (mais la méthode utilisant map(int, str(num))
est probablement la plus souhaitable des deux.
Celles qui réinventent la roue sont intéressantes mais ne sont probablement pas aussi souhaitables qu’elles soient réellement utilisées.
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)
Si vous avez une chaîne comme celle-ci: '123456' Et que vous voulez une liste d'entiers comme celle-ci: [1,2,3,4,5,6], utilisez ceci:
>>>s = '123456'
>>>list1 = [int(i) for i in list(s)]
>>>print(list1)
[1,2,3,4,5,6]
ou si vous voulez une liste de chaînes comme celle-ci: ['1', '2', '3', '4', '5', '6'], utilisez ceci:
>>>s = '123456'
>>>list1 = list(s)
>>>print(list1)
['1','2','3','4','5','6']