web-dev-qa-db-ja.com

整数から数字リストへの変換

integerlistに変換する最も迅速でクリーンな方法は何ですか?

たとえば、_132_を_[1,3,2]_に、_23_を_[2,3]_に変更します。 intである変数があり、個々の数字を比較できるようにしたいので、int(number[0])を実行できるので、それをリストにするのがベストだと思いました。 int(number[1])を使用すると、リスト要素を簡単に変換して整数演算に戻すことができます。

35
Dergyll

最初に整数を文字列に変換してから、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]
67

最短かつ最良の方法はすでに答えられていますが、私が最初に考えたのは数学的な方法でしたので、ここにあります:

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)

これは、もう1つの興味深いアプローチです。実際の使用例では、このようなことを絶対に使用する必要はありません。

5
jadkik94

文字列に変換された数値でlistを使用します。

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

このページにはすでに素晴らしいメソッドが記載されていますが、どちらを使用するかは少しわかりにくいようです。そこで、自分で簡単に判断できるように、いくつかの測定値を追加しました。


多数の値が使用されています(オーバーヘッド用)_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_

リスト内包表記の使用:

インポートtimeit

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

この回答から取得したコード

DuberlyGonzálezMolinariによる答え:

_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))は最速の方法です(したがって、おそらく使用するのに最適な方法です)。リストの内包表記は2番目に高速です(ただし、map(int, str(num))を使用する方法は、おそらく2つのうちで最も望ましい方法です。

車輪を再発明するものは興味深いですが、おそらく実際の使用ではそれほど望ましくありません。

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)

ループすることで、次のようにできます:)

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]
0
Aamod Varma
>>>list(map(int, str(number)))  #number is a given integer

数字のすべての数字のリストを返します。

0
Sandeep Chauhan

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

使用できます:

最初に文字列の値を変換して反復します。各値は整数_value = 12345_に変換できます

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

0
juancarlos