Converting List of String to Integer

Samir spython01 at gmail.com
Mon Jul 21 18:39:13 EDT 2008


On Jul 21, 6:15 pm, Andrew Freeman <alif... at gmail.com> wrote:
> 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- Hide quoted text -
>
> - Show quoted text -

Andrew,

Thanks for the tip, though the syntax makes my head spin a bit in
trying to comprehend it.  For my small list, I didn't notice a
discernible increase in speed, but I may have to try it with a larger
list size.

Incidentally, I had never heard of iPython but from their web site, it
looks like an interesting tool.  I'll have to check it out.

Thanks.

Samir



More information about the Python-list mailing list