如何将整数拆分为数字列表?
假设我有一个输入的整数 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]