如何将整数拆分为数字列表?

123 投票
10 回答
439832 浏览
提问于 2025-04-15 17:02

假设我有一个输入的整数 12345。我该怎么把它分割成一个列表,比如 [1, 2, 3, 4, 5] 呢?

10 个回答

14

我不太想把整数变成字符串,所以我用这个函数来处理:

def digitize(n, base=10):
    if n == 0:
        yield 0
    while n:
        n, d = divmod(n, base)
        yield d

举个例子:

tuple(digitize(123456789)) == (9, 8, 7, 6, 5, 4, 3, 2, 1)
tuple(digitize(0b1101110, 2)) == (0, 1, 1, 1, 0, 1, 1)
tuple(digitize(0x123456789ABCDEF, 16)) == (15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)

你可以看到,这个方法会从右到左输出数字。如果你想从左到右显示数字,就需要先把它们排成一个序列,然后再反转一下:

reversed(tuple(digitize(x)))

你还可以用这个函数进行进制转换,因为它可以把整数拆分开。下面的例子把一个十六进制数拆分成二进制的四位组,结果是以元组的形式呈现:

import itertools as it
tuple(it.zip_longest(*[digitize(0x123456789ABCDEF, 2)]*4, fillvalue=0)) == ((1, 1, 1, 1), (0, 1, 1, 1), (1, 0, 1, 1), (0, 0, 1, 1), (1, 1, 0, 1), (0, 1, 0, 1), (1, 0, 0, 1), (0, 0, 0, 1), (1, 1, 1, 0), (0, 1, 1, 0), (1, 0, 1, 0), (0, 0, 1, 0), (1, 1, 0, 0), (0, 1, 0, 0), (1, 0, 0, 0))

需要注意的是,这种方法不处理小数,但可以进行调整以适应小数。

117

把数组返回成字符串

>>> list(str(12345))
['1', '2', '3', '4', '5']

把数组返回成整数

>>> map(int,str(12345))
[1, 2, 3, 4, 5]
192

先把数字转换成字符串,这样你就可以一个一个地处理它。然后再把每个数字(字符)转换回整数,这个过程可以用一种叫做列表推导式的方法来实现:

>>> [int(i) for i in str(12345)]

[1, 2, 3, 4, 5]

撰写回答