web-dev-qa-db-fra.com

Conversion d'un entier en liste de chiffres

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.

31
Dergyll

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]
63
Ashwini Chaudhary

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.

5
jadkik94

Utilisez list sur un nombre converti en chaîne:

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

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

Utilisation de 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

Utilisation de la compréhension de liste:

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.

La "voie mathématique":

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

La méthode 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

La réponse de Duberly González Molinari:

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

Remarques:

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.

2
Simon
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']
0
Pawan Dixit