What's the fastest way to calculate the midpoints of a sequence of edges?
Some improvements.


Use list comprehension
Only need to multiply the local average edge coord by matrix world
once.
Multiply / divide a vector by a scalar, rather than on a per
component basis.


Test script

import bpy
import bmesh

ob = bpy.context.edit_object
me = ob.data
bm = bmesh.from_edit_mesh(me)

mw = ob.matrix_world
elist = [(e, mw * (e.verts[0].co + e.verts[1].co) / 2) 
        for e in bm.edges if e.select]


could make a little helper routine. 

def mid_edge(e):       
    return (e.verts[0].co + e.verts[1].co) / 2

elist = [(e, mw * mid_edge(e)) 
        for e in bm.edges if e.select]