pythonvariablescasting

Efficient way to convert strings from split function to ints in Python


I have a string of data with the following format: xpos-ypos-zoom (i.e. 8743-12083-15) that I want to split up and store in the variables xpos, ypos, and zoom. Since I need to do some calculations with these number I'd like to convert them to integers right from the beginning. Currently, the way I'm doing this is with the following code:

file = '8743-12083-15'
xval, yval, zoom  = file.split("-")
xval = int(xval)
yval = int(yval)

It seems to me there should be a more efficient way of doing this. Any ideas?


Solution

  • My suggestion is a list comprehension.

    test = '8743-12083-15'
    lst_int = [int(x) for x in test.split("-")]
    

    As to which is most efficient (cpu-cyclewise) is something that should always be tested.

    Some quick testing on my Python 2.6 install indicates map is probably the most efficient candidate here (building a list of integers from a value-splitted string). Note that the difference is so small that this does not really matter until you are doing this millions of times (and it is a proven bottleneck)...

    def v1():
        return [int(x) for x in '8743-12083-15'.split('-')]
    
    def v2():
        return map(int, '8743-12083-15'.split('-'))
    
    import timeit
    print "v1", timeit.Timer('v1()', 'from __main__ import v1').timeit(500000)
    print "v2", timeit.Timer('v2()', 'from __main__ import v2').timeit(500000)
    

    Output:

    v1 3.73336911201 
    v2 3.44717001915