Map vs For Loop

I've been looking at a lot of mapping functions today and I thought I would see how maps fare against a simple for loop.

In [1]:
def convert_for1(data):
    output = []
    for line in data:
        x,y = line.split(',')
        output+=[[float(x),float(y)]]
    return output

def convert_for2(data):
    output = []
    for line in data:
        x,y = line.split(',')
        output.append([[float(x),float(y)]])
    return output

def convert_map(data):
    return [list(map(float, x.split(','))) for x in data]

Well I have to admit that the code looks a lot cleaner using the mapping function.

In [2]:
text = """ 1,2
           2,3
           3,4"""
data = text.splitlines()

Checking to see that they return the same thing...

In [3]:
convert_for1(data)
Out[3]:
[[1.0, 2.0], [2.0, 3.0], [3.0, 4.0]]
In [4]:
convert_for2(data)
Out[4]:
[[[1.0, 2.0]], [[2.0, 3.0]], [[3.0, 4.0]]]
In [5]:
convert_map(data)
Out[5]:
[[1.0, 2.0], [2.0, 3.0], [3.0, 4.0]]

Let check on the speed now. Does few lines of code mean a faster function?

In [6]:
%timeit convert_for1(data)
100000 loops, best of 3: 5.63 us per loop
In [7]:
%timeit convert_for2(data)
100000 loops, best of 3: 5.66 us per loop
In [8]:
%timeit convert_map(data)
100000 loops, best of 3: 8.79 us per loop

Well I guess that settles it for me. I find the convert_for1 loop the most readable, and now I see that it is just faster too now. That is the approach I'm using from now on.

Oh, I know that using numba or cython would be faster, but this is the approach I'll use unless I am looking for real speed.