[Tutor] casting string to integer in a list of lists

culpritNr1 ig2ar-saf1 at yahoo.co.uk
Fri Jan 9 17:10:27 CET 2009


Hello Denis and All,

Your solution does show elegance. To remind people, it's this one:

lol = [[1,2,3],[4,5,6],[7,8,9]]
new_lol = [[a,b**3,c] for [a,b,c] in lol]
print lol
print new_lol
==>
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
[[1, 8, 3], [4, 125, 6], [7, 512, 9]]

Now, as I said in my original post, I can't assume that all inner-lists will
have the same number of elements. Common data looks like this

LoL = [['chrX', '160944034', '160944035', 'gnfX.145.788', '63.60'],
             ['chrX', '161109992', '161109993', 'rs13484104', '63.60'],
             ['chrX', '161414112', '161414113', 'undetermined'],
             ['chrX', '161544071', '161544072', 'rs13484106', '63.60',
'RNA-BP', 'PLoS Biol 6(10): e255'],
             ['chrX', '162030736', '162030737', 'gnfX.146.867', '67.05'],
             ['chrX', '164171913', '164171914', 'gnfX.148.995', '70.45']]

Do you still think that this problem can be elegantly tackled by list
comprehensions?

Thank you,

culpritNr1






spir wrote:
> 
> Le Thu, 8 Jan 2009 11:51:01 -0800 (PST),
> culpritNr1 <ig2ar-saf1 at yahoo.co.uk> a écrit :
> 
>> 
>> Hi All,
>> 
>> Say I have this nice list of lists:
>> 
>> LoL = [['chrX', '160944034', '160944035', 'gnfX.145.788', '63.60'],
>>              ['chrX', '161109992', '161109993', 'rs13484104', '63.60'],
>>              ['chrX', '161414112', '161414113', 'rs13484105', '63.60'],
>>              ['chrX', '161544071', '161544072', 'rs13484106', '63.60'],
>>              ['chrX', '162030736', '162030737', 'gnfX.146.867', '67.05'],
>>              ['chrX', '164171913', '164171914', 'gnfX.148.995', '70.45']]
>> 
>> Now I want to cast the second and third "columns" from string to integer,
>> like this
>> 
>> LoL = [['chrX', 160944034, 160944035, 'gnfX.145.788', '63.60'],
>>              ['chrX', 161109992, 161109993, 'rs13484104', '63.60'],
>>              ['chrX', 161414112, 161414113, 'rs13484105', '63.60'],
>>              ['chrX', 161544071, 161544072, 'rs13484106', '63.60'],
>>              ['chrX', 162030736, 162030737, 'gnfX.146.867', '67.05'],
>>              ['chrX', 164171913, 164171914, 'gnfX.148.995', '70.45']]
>> 
>> Is there any elegant way to do this? I can't assume that all lines will
>> have
>> the same number of elements.
> 
> In you do not need checking whether specific items are "castable" (i.e.
> you really know what's in
> the list) you may use such a pattern:
> 
> lol = [[1,2,3],[4,5,6],[7,8,9]]
> new_lol = [[a,b**3,c] for [a,b,c] in lol]
> print lol
> print new_lol
> ==>
> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
> [[1, 8, 3], [4, 125, 6], [7, 512, 9]]
> 
> denis
>> Thank you,
>> 
>> Your Culprit
>> 
>> 
> 
> 
> ------
> la vida e estranya
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
> 
> 

-- 
View this message in context: http://www.nabble.com/casting-string-to-integer-in-a-list-of-lists-tp21359600p21375207.html
Sent from the Python - tutor mailing list archive at Nabble.com.



More information about the Tutor mailing list