从长整型创建列表

0 投票
3 回答
5477 浏览
提问于 2025-04-16 19:05

我有一个非常长的数字(1000位)。我想把它转换成一个列表,你会怎么做呢?因为:

list(n)

出现了错误:'long'对象是不可迭代的

3 个回答

0

一种方法是使用 list('%d' % mynumber)

Python 2.6.6 (r266:84292, Apr 20 2011, 11:58:30) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> n=8948974395274589470928357238945723894572395723572358257
>>> list(n)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'long' object is not iterable
>>> list('%d' % n)
['8', '9', '4', '8', '9', '7', '4', '3', '9', '5', '2', '7', '4', '5', '8', '9', '4', '7', '0', '9', '2', '8', '3', '5', '7', '2', '3', '8', '9', '4', '5', '7', '2', '3', '8', '9', '4', '5', '7', '2', '3', '9', '5', '7', '2', '3', '5', '7', '2', '3', '5', '8', '2', '5', '7']
3

如果你想把数字的字符串表示中的每个字符作为单独的列表项:

digits = list(str(n))

注意,如果你只是想一次处理一个字符,其实不需要创建列表。字符串本身就可以逐个遍历:

for d in str(n):
   print d,

如果你想把每个数字(作为整数)当作单独的列表项,并且假设这个数字是正数(这样就不用处理烦人的负号):

digits = [int(d) for d in str(n)]
7

你问的问题不是特别清楚,但如果你想要遍历数字的每一位,可以先把它转换成字符串:

x = str(n)

你可以像对待列表一样遍历字符串。

如果你真的想要一个真正的列表(我能想到的唯一原因就是你想修改数字),你可以这样做:

xl = list(str(n))

如果有人想把一个1000位的整数转换成字节列表,答案是……通常不需要,这在大多数情况下没有什么意义(这么大的数字通常不会用普通的数据类型来存储或处理)。如果你需要把它转换成紧凑的二进制形式,可以看看NumPy,如果你经常处理这么大的数字,使用它是比较合适的。

如果你处理的是更常见的数字(比如8位、16位、32位或64位),可以查看struct模块。

撰写回答