Converting List of String to Integer

Andrew Freeman alif016 at gmail.com
Mon Jul 21 18:15:55 EDT 2008


Samir wrote:
> On Jul 21, 3:20 pm, Gary Herron <gher... at islandtraining.com> wrote:
>   
>> Samir wrote:
>>     
>>> Hi Everyone,
>>>       
>>> I am relatively new to Python so please forgive me for what seems like
>>> a basic question.
>>>       
>>> Assume that I have a list, a, composed of nested lists with string
>>> representations of integers, such that
>>>       
>>> a = [['1', '2'], ['3'], ['4', '5', '6'], ['7', '8', '9', '0']]
>>>       
>>> I would like to convert this to a similar list, b, where the values
>>> are represented by integers, such as
>>>       
>>> b = [[1, 2], [3], [4, 5, 6], [7, 8, 9, 0]]
>>>       
>>> I have unsuccessfully tried the following code:
>>>       
>>> n = []
>>> for k in a:
>>>     n.append([int(v) for v in k])
>>> print n
>>>       
>>> Does anyone know what I am doing wrong?
>>>       
>>> Thanks in advance.
>>>       
>>> Samir
>>> --
>>> http://mail.python.org/mailman/listinfo/python-list
>>>       
>> You didn't tell us how it failed for you, so I can't guess what's wrong.
>>
>> However, your code works for me:
>>
>>  >>> a = [['1', '2'], ['3'], ['4', '5', '6'], ['7', '8', '9', '0']]
>>  >>> n = []
>>  >>> for k in a:
>> ...    n.append([int(v) for v in k])
>> ...
>>  >>> print n
>> [[1, 2], [3], [4, 5, 6], [7, 8, 9, 0]]
>>
>> (Although you seem to have confused variables b and n.)
>>
>> Gary Herron- Hide quoted text -
>>
>> - Show quoted text -
>>     
>
> Hi Gary,
>
> Thanks for your quick response (and sorry about mixing up b and n).
> For some reason, the logic I posted seems to work ok while I'm using
> the Python shell, but when used in my code, the program just hangs.
> It never outputs the results.  Below is the code in its entirety.  Is
> there a problem with my indendentation?
>
> a = n = []
> t = """
> 1 2
> 3
> 4 5 6
> 7 8 9 0
> """
>
> d = t.split("\n")
>
> for x in range(1,len(d)-1):
>     a.append(d[x].split(" "))
> print a
>
> for k in a:
>     n.append([int(v) for v in k])
>
> print n
>
> Thanks again.
>
> Samir
> --
> http://mail.python.org/mailman/listinfo/python-list
I think this will work better, a sub-list comprehension of sorts:
n = [[int(i) for i in k] for k in a]

here is an ipython interactive session using it:
In [1]: a = n = []

In [2]: t = """
   ...: 1 2
   ...: 3
   ...: 4 5 6
   ...: 7 8 9 0
   ...: """

In [3]:

In [4]: d = t.split("\n")

In [5]: for x in range(1,len(d)-1):
   ...:     a.append(d[x].split(" "))
   ...:    
   ...:    

In [6]: a
Out[6]: [['1', '2'], ['3'], ['4', '5', '6'], ['7', '8', '9', '0']]

In [7]: n = [[int(i) for i in k] for k in a]

In [8]: n
Out[8]: [[1, 2], [3], [4, 5, 6], [7, 8, 9, 0]]
--
Andrew






More information about the Python-list mailing list