Duplicate mapped elements in Riffle
l1 = {a, b, c};
l2 = {d, {e, f}, g};
Partition[Flatten[Thread /@ Thread[{l1, l2}]], 2]
{{a, d}, {b, e}, {b, f}, {c, g}}
or
(## & @@ Thread @ #) & /@ Thread[{l1, l2}]
{{a, d}, {b, e}, {b, f}, {c, g}}
Using undocumented Function
syntax, Listable
, and v10 Composition
syntax:
fn1 = #[[2, 1]] & @* Reap @* Function[, Sow[{##}], Listable];
fn1[{a, b, c}, {d, {e, f}, g}]
{{a, d}, {b, e}, {b, f}, {c, g}}
This works at deeper levels as well:
fn1[{a, b, c}, {d, {{e1, e2}, f}, g}]
{{a, d}, {b, e1}, {b, e2}, {b, f}, {c, g}}
Another method without the undocumented functionality:
With[{h = Unique["h", Listable]},
fn2 = Cases[h[##], h[e__] :> {e}, -1] &
]
Test:
fn2[{a, b, c}, {d, {{e1, e2}, f}, g}]
{{a, d}, {b, e1}, {b, e2}, {b, f}, {c, g}}
One way:
ff = Flatten[#, 1] &;
ff@MapThread[Function[{u, v}, {u, #} & /@ ff[{v}]], {{a, b, c}, {x, {y, u}, z}}]
(* {{a, x}, {b, y}, {b, u}, {c, z}}*)