Iterate with python on vertices created by subdividing an edge
Use bmesh

To keep tabs on mesh elements recommend using bmesh

Most mesh operators have their bmesh equivalent.

In this case bmesh.ops.subdivide_edges  

The bonus of bmesh operators is they return new geometry.

Test method, 1 cut subdivide on all edges.

import bpy
import bmesh

context = bpy.context

ob = context.object
me = ob.data

bm = bmesh.new()
bm.from_mesh(me)

print(me.name) 
print("Before subd")

for e in bm.faces[:] + bm.edges[:] + bm.verts[:]:
    print(e)

ret = bmesh.ops.subdivide_edges(bm,
        edges=bm.edges,
        cuts=1,
        use_grid_fill=True)

for k, v in ret.items():
    print(k)
    for e in v:
        print(e)

bm.to_mesh(me)
me.update() 


Result of running on default "Plane" mesh


Before (left) 1 face 4 edges 4 verts and after 4 faces, 12 edges and 9 verts.

Plane.001
Before subd
&lt;BMFace(0x7f3c16a24010), index=0, totverts=4&gt;
&lt;BMEdge(0x7f3c127b3010), index=0, verts=(0x7f3c1232f080/2, 0x7f3c1232f010/0)&gt;
&lt;BMEdge(0x7f3c127b3060), index=1, verts=(0x7f3c1232f010/0, 0x7f3c1232f048/1)&gt;
&lt;BMEdge(0x7f3c127b30b0), index=2, verts=(0x7f3c1232f048/1, 0x7f3c1232f0b8/3)&gt;
&lt;BMEdge(0x7f3c127b3100), index=3, verts=(0x7f3c1232f0b8/3, 0x7f3c1232f080/2)&gt;
&lt;BMVert(0x7f3c1232f010), index=0&gt;
&lt;BMVert(0x7f3c1232f048), index=1&gt;
&lt;BMVert(0x7f3c1232f080), index=2&gt;
&lt;BMVert(0x7f3c1232f0b8), index=3&gt;
geom_inner
&lt;BMVert(0x7f3c1232f0f0), index=4&gt;
&lt;BMVert(0x7f3c1232f128), index=5&gt;
&lt;BMVert(0x7f3c1232f160), index=6&gt;
&lt;BMVert(0x7f3c1232f198), index=7&gt;
&lt;BMVert(0x7f3c1232f1d0), index=8&gt;
&lt;BMEdge(0x7f3c127b3290), index=8, verts=(0x7f3c1232f1d0/8, 0x7f3c1232f198/7)&gt;
&lt;BMEdge(0x7f3c127b32e0), index=9, verts=(0x7f3c1232f128/5, 0x7f3c1232f1d0/8)&gt;
&lt;BMEdge(0x7f3c127b3330), index=10, verts=(0x7f3c1232f1d0/8, 0x7f3c1232f0f0/4)&gt;
&lt;BMEdge(0x7f3c127b3380), index=11, verts=(0x7f3c1232f160/6, 0x7f3c1232f1d0/8)&gt;
&lt;BMFace(0x7f3c16a24048), index=1, totverts=4&gt;
&lt;BMFace(0x7f3c16a24080), index=2, totverts=4&gt;
&lt;BMFace(0x7f3c16a240b8), index=3, totverts=4&gt;
geom_split
&lt;BMVert(0x7f3c1232f0f0), index=4&gt;
&lt;BMVert(0x7f3c1232f128), index=5&gt;
&lt;BMVert(0x7f3c1232f160), index=6&gt;
&lt;BMVert(0x7f3c1232f198), index=7&gt;
&lt;BMEdge(0x7f3c127b3010), index=0, verts=(0x7f3c1232f0f0/4, 0x7f3c1232f010/0)&gt;
&lt;BMEdge(0x7f3c127b3060), index=1, verts=(0x7f3c1232f128/5, 0x7f3c1232f048/1)&gt;
&lt;BMEdge(0x7f3c127b30b0), index=2, verts=(0x7f3c1232f160/6, 0x7f3c1232f0b8/3)&gt;
&lt;BMEdge(0x7f3c127b3100), index=3, verts=(0x7f3c1232f198/7, 0x7f3c1232f080/2)&gt;
&lt;BMEdge(0x7f3c127b3150), index=4, verts=(0x7f3c1232f080/2, 0x7f3c1232f0f0/4)&gt;
&lt;BMEdge(0x7f3c127b31a0), index=5, verts=(0x7f3c1232f010/0, 0x7f3c1232f128/5)&gt;
&lt;BMEdge(0x7f3c127b31f0), index=6, verts=(0x7f3c1232f048/1, 0x7f3c1232f160/6)&gt;
&lt;BMEdge(0x7f3c127b3240), index=7, verts=(0x7f3c1232f0b8/3, 0x7f3c1232f198/7)&gt;
geom
&lt;BMVert(0x7f3c1232f0f0), index=4&gt;
&lt;BMVert(0x7f3c1232f128), index=5&gt;
&lt;BMVert(0x7f3c1232f160), index=6&gt;
&lt;BMVert(0x7f3c1232f198), index=7&gt;
&lt;BMVert(0x7f3c1232f1d0), index=8&gt;
&lt;BMEdge(0x7f3c127b3010), index=0, verts=(0x7f3c1232f0f0/4, 0x7f3c1232f010/0)&gt;
&lt;BMEdge(0x7f3c127b3060), index=1, verts=(0x7f3c1232f128/5, 0x7f3c1232f048/1)&gt;
&lt;BMEdge(0x7f3c127b30b0), index=2, verts=(0x7f3c1232f160/6, 0x7f3c1232f0b8/3)&gt;
&lt;BMEdge(0x7f3c127b3100), index=3, verts=(0x7f3c1232f198/7, 0x7f3c1232f080/2)&gt;
&lt;BMEdge(0x7f3c127b3150), index=4, verts=(0x7f3c1232f080/2, 0x7f3c1232f0f0/4)&gt;
&lt;BMEdge(0x7f3c127b31a0), index=5, verts=(0x7f3c1232f010/0, 0x7f3c1232f128/5)&gt;
&lt;BMEdge(0x7f3c127b31f0), index=6, verts=(0x7f3c1232f048/1, 0x7f3c1232f160/6)&gt;
&lt;BMEdge(0x7f3c127b3240), index=7, verts=(0x7f3c1232f0b8/3, 0x7f3c1232f198/7)&gt;
&lt;BMEdge(0x7f3c127b3290), index=8, verts=(0x7f3c1232f1d0/8, 0x7f3c1232f198/7)&gt;
&lt;BMEdge(0x7f3c127b32e0), index=9, verts=(0x7f3c1232f128/5, 0x7f3c1232f1d0/8)&gt;
&lt;BMEdge(0x7f3c127b3330), index=10, verts=(0x7f3c1232f1d0/8, 0x7f3c1232f0f0/4)&gt;
&lt;BMEdge(0x7f3c127b3380), index=11, verts=(0x7f3c1232f160/6, 0x7f3c1232f1d0/8)&gt;
&lt;BMFace(0x7f3c16a24010), index=0, totverts=4&gt;
&lt;BMFace(0x7f3c16a24048), index=1, totverts=4&gt;
&lt;BMFace(0x7f3c16a24080), index=2, totverts=4&gt;
&lt;BMFace(0x7f3c16a240b8), index=3, totverts=4&gt;


The only 4 elements to survive unscathed from the operator are the original four corner verts.  They appear not in the return geometry.  All other geom has been altered in some way and is spread across the three options geom_inner, geom_split, geom.  I leave it to you to decipher what each is.


  look nice but how do I extract the initial edge I want to work on?
  everything seems selected when i iterate on bm.edges.


Yes, bm.edges is all edges in the bmesh. Can feed any subset list of edges into operator.

Another example, run in edit mode, make sure you are in edge select mode, have an active edge selected.

If so, Makes 5 cuts in edge, loops thru and prints return geometry as above.

import bpy
import bmesh

context = bpy.context

ob = context.edit_object
me = ob.data

bm = bmesh.from_edit_mesh(me)
# selected edges
selected_edges = [e for e in bm.edges if e.select]
# active edge (from active selection)
active_edge = bm.select_history.active
# make sure active element is edge
assert(isinstance(active_edge, bmesh.types.BMEdge))

ret = bmesh.ops.subdivide_edges(bm,
        edges=[active_edge],
        cuts=5,
        )

for k, v in ret.items():
    print(k)
    for e in v:
        #e.select = True
        print(e)

bmesh.update_edit_mesh(me)