用Python将数字拆分为数字并保存到列表中

2 投票
3 回答
9476 浏览
提问于 2025-04-16 23:52

我想把一个数字拆分成每一位,然后把这些位数存到一个列表(或者数组)里,使用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

然后再重复代码的第一部分?或者就像我最开始那样做?我并不知道这个数字的确切长度,但它不会很长。

所以,有什么建议吗?也许你知道更好的方法来把数字拆分成每一位,或者其他什么方法。

3 个回答

2

虽然大家常说 map 这个东西在 Python 里不太符合风格,但这个任务确实很适合用它来完成:

>>> d = 123456
>>> map(int, str(d))
[1, 2, 3, 4, 5, 6]
5

假设 num 是一个正整数,那么这个数字的位数可以通过 int(math.log10(num) + 1) 来计算。

不过,更简单的方法是直接使用 listappend 方法,这样你就不需要事先知道长度了。

还有一种更简单的方法(不过这样得到的列表会是反向的):

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

或者

dig = map(int, str(num))
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)),这会把数字变成字符串,然后计算长度。

撰写回答