61

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

たとえば、 と に変更し132ます。である変数があり、個々の数字を比較できるようにしたいので、数字操作のためにリスト要素を簡単に int に戻すことができるので、それをリストにするのが最善だと思いました。[1,3,2]23[2,3]intint(number[0])int(number[1])

4

12 に答える 12

92

最初に整数を文字列に変換してから、 を使用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]
于 2012-12-16T22:07:10.963 に答える
14

このページにはすでに優れた方法が記載されていますが、どれを使用するかについては少しわかりにくいようです. そのため、自分で簡単に決定できるように、いくつかの測定値を追加しました。


大量に使用されました (オーバーヘッド用)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

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

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

出力:0.37039988200000007

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

備考:

いずれの場合も、map(int, str(num))が最速の方法です (したがって、おそらくこれを使用するのが最善の方法です)。リスト内包表記は 2 番目に高速です (ただし、使用する方法map(int, str(num))はおそらく 2 つの中で最も望ましい方法です。

車輪の再発明は興味深いものですが、実際の使用にはあまり望ましくないでしょう。

于 2018-06-28T23:39:50.927 に答える
6

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

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つの興味深いアプローチです。実際のユースケースでは、このようなものを使用する必要はありません。

于 2012-12-16T22:33:59.513 に答える
2

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

In [1]: [int(x) for x in list(str(123))]
Out[2]: [1, 2, 3]
于 2012-12-16T22:11:59.437 に答える
-1
num = list(str(100))
index = len(num)
while index > 0:
    index -= 1
    num[index] = int(num[index])
print(num)

オブジェクトを印刷し[1, 0, 0]ます。

于 2018-06-04T18:46:33.137 に答える