it-swarm.com.de

Konvertieren einer Ganzzahl in eine Ziffernliste

Was ist der schnellste und sauberste Weg, eine integer in eine list umzuwandeln? 

Ändern Sie beispielsweise 132 in [1,3,2] und 23 in [2,3]. Ich habe eine Variable, die eine int ist, und ich möchte die einzelnen Ziffern vergleichen können. Ich dachte, es wäre das Beste, es in eine Liste zu setzen, da ich einfach int(number[0]), int(number[1]) tun kann, um das Listenelement einfach wieder in int zu konvertieren Ziffernoperationen.

31
Dergyll

Wandle die Ganzzahl zuerst in eine Zeichenfolge um und verwende dann map, um int darauf anzuwenden:

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

oder mit einem Listenverständnis:

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

Der kürzeste und beste Weg ist bereits beantwortet, aber das erste, woran ich dachte, war der mathematische Weg, also hier:

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)

Es ist nur ein weiterer interessanter Ansatz, Sie müssen so etwas in praktischen Anwendungsfällen definitiv nicht verwenden.

5
jadkik94

Verwenden Sie list für eine Zahl, die in einen String umgewandelt wird:

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

Auf dieser Seite gibt es bereits großartige Methoden, die jedoch etwas unklar erscheinen. Daher habe ich einige Messungen hinzugefügt, damit Sie leichter selbst entscheiden können:


Eine große Zahl wurde verwendet (für Overhead) 1111111111111122222222222222222333333333333333333333

Verwenden von 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)

Ausgabe: 0.018631496999999997

Verwenden des Listenverständnisses:

importzeitpunkt

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

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

Ausgabe: 0.28403817900000006

Code aus diese Antwort

Die Ergebnisse zeigen, dass die erste Methode mit eingebauten Methoden viel schneller ist als das Listenverständnis.

Der "mathematische Weg":

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))

Ausgabe: 0.38133582499999996

Code aus diese Antwort

Die list(str(123))-Methode (liefert nicht die richtige Ausgabe):

import timeit

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

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

Ausgabe: 0.028560138000000013

Code aus diese Antwort

Die Antwort von 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))

Ausgabe: 0.37039988200000007

Code aus diese Antwort

Bemerkungen:

In allen Fällen ist map(int, str(num)) die schnellste Methode (und daher wahrscheinlich die beste zu verwendende Methode). Listenverständnis ist das zweitschnellste (aber die Methode, die map(int, str(num)) verwendet, ist wahrscheinlich die wünschenswerteste von beiden.

Diejenigen, die das Rad neu erfinden, sind interessant, aber im realen Einsatz wahrscheinlich nicht so wünschenswert.

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)

Durch Schleifen kann das folgendermaßen gemacht werden :)

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)

Antwort wird

Enter the number2342
[2, 3, 4, 2]
0
Aamod Varma
>>>list(map(int, str(number)))  #number is a given integer

Es wird eine Liste aller Ziffern der Nummer zurückgegeben.

0
Sandeep Chauhan

Wenn Sie eine Zeichenfolge wie die folgende verwenden: '123456' Und Sie möchten eine Liste von ganzen Zahlen wie folgt: [1,2,3,4,5,6], verwenden Sie diese Anweisung:

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

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

oder wenn Sie eine Liste von Strings wie folgt wünschen: ['1', '2', '3', '4', '5', '6'], verwenden Sie Folgendes:

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

['1','2','3','4','5','6']
0
Pawan Dixit

sie können verwenden:

Konvertieren Sie zuerst den Wert in einen String, um ihn zu iterieren. Jeder Wert kann in eine Ganzzahl konvertiert werden. value = 12345

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

0
juancarlos