**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. Will have a default of local avge if not passed a matrix.

    def mid_edge(e, matrix=mathutils.Matrix()):       
        return matrix * (e.verts[0].co + e.verts[1].co) / 2