2

数値を数字に分割し、Pythonでリスト(または配列)に保存したい。まず、次のようなリストを作成する必要があります

dig = [0 for i in range(10)]

その後

i = 0
while num > 9:
    dig[i] = num % 10
    i += 1
    num /= 10
dig[i] = num

しかし、10個のスペースのリストを作成するのは本当に好きではありません。ループを繰り返さずに数値の長さを取得することは可能ですか?

i = 0
num2 = num
while num2 > 9:
    num2 /= 10
    i += 1
i += 1

コードの最初の部分を繰り返しますか?それとも、私が最初に作ったように作るだけですか?数字の正確な長さはわかりませんが、それほど長くはありません

アドバイスはありますか?数字を数字に分割するより良い方法を知っているかもしれませんし、他の何かかもしれません。

4

3 に答える 3

10

数字を小さいものから大きいものの順に追加するだけなので、空のリストを使用してください。

dig = []
i = 0
while num > 9:
    dig.append(num % 10)
    i += 1
    num /= 10
dig.append(num)

または、

dig = list(int(d) for d in str(num))

つまり、に123変わり'123'、次に各桁を数字に戻し、それらをリストに入れて、結果として[1, 2, 3]

お使いのバージョンと同じ順序で使用する場合は、

dig = reversed(int(d) for d in str(num))

本当に数値の長さを取得したい場合は、それlen(str(num))を文字列に変換してから長さを取得するのが最も簡単です。

于 2011-08-18T10:59:11.253 に答える
5

numが正の整数であるとすると、桁数はに等しくなりますint(math.log10(num) + 1)

しかし、それよりも優れているのは、-のappend方法を使用するlistことです。そうすれば、事前に長さを知る必要はありません。

さらに簡単(リストは逆の順序になりますが):

dig = [int(x) for x in str(num)]

また

dig = map(int, str(num))
于 2011-08-18T10:58:45.497 に答える
2

mapPythonic ではないと言われることがよくありますが、このタスクは間違いなく Pythonic 向けです。

>>> d = 123456
>>> map(int, str(d))
[1, 2, 3, 4, 5, 6]
于 2011-08-18T11:03:14.450 に答える