Create a list from a long int

Question:

I’ve got a very long ( 1000 digit ) number.
I want to convert it into a list , how would you go about it since :

list(n)

TypeError: ‘long’ object is not
iterable

Asked By: Finger twist

||

Answers:

one way would be 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']
Answered By: jcomeau_ictx

It’s not exactly clear what you’re asking for, but if what you want is to iterate over the digits, just convert it to a string:

x = str(n)

You can iterate over a string as if it were a list.

If you really want a true list (only reason I can think of is you want to modify digits), you can do:

xl = list(str(n))

(In the event someone comes along looking for a way to convert an 1000-digit integer into a list of bytes, the answer is… normally don’t, it’s not really meaningful in most contexts (numbers that big aren’t stored/manipulated as typical native data types). If you need to get it into a packed binary form, look into NumPy, which you should probably be using anyway if you’re routinely dealing with numbers this large.

If you’ve got a more typical number (e.g. 8, 16, 32 or 64 bits), check out the included struct module.)

Answered By: Nicholas Knight

If you want each character in a string representation of the number as a separate list item:

digits = list(str(n))

Note that if you just want to iterate over the characters in the number one at a time, you don’t need to make a list. The string itself is iterable:

for d in str(n):
   print d,

If you want each digit (as an integer) as a separate list item, and assuming the number is known to be positive (so as not to have to deal with the pesky minus sign):

digits = [int(d) for d in str(n)]
Answered By: kindall
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.