Changing numbers inside list to a list
If[NumberQ[N[#]], {#, 0}, #] & /@ a
or
Replace[a, {b_ :> If[NumberQ[N[b]], {b, 0}, b]}, 1]
or
Replace[a, {b_ :> {b, 0} /; NumberQ[N[b]]}, 1]
or
a /. {{a_, b_} :> {a, b}, b_ :> {b, 0} /; NumberQ[N[b]]}
or the above with Element[b_,Complexes]
i.e.
a /. {{a_, b_} :> {a, b}, b_ :> {b, 0} /; Element[b, Complexes]}
or
If[Element[#, Complexes] && !ListQ[#], {#, 0}, #] & /@ a
or
Replace[a, {b_ :> {b, 0} /; !ListQ[b] && Element[b, Complexes]}, 1]
etc.
Update: Based on Alucard's nice comment. If and only if elements strictly numbers or lists:
Flatten@*List/@a//PadRight
Update${}^{\mathbf 2}$: TIL: Besides brevity, Mr.Wizard's suggestion NumericQ
definitely more efficient than NumberQ@*N
.
Relatively inconsequential for simple numbers, but you can get creative:
someNumber =
Total[Table[(\[Pi] + I + GoldenAngle)^
RandomInteger[{4,
1000}]/((\[Pi] - GoldenAngle + Exp[ I GoldenAngle])^
RandomInteger[{4, 1000}] + (\[Pi] + GoldenAngle +
Exp[ I GoldenAngle])^RandomInteger[{4, 1000}]), {600}]];
RepeatedTiming[someNumber // N // NumberQ]
{0.01, True}
RepeatedTiming[NumericQ@someNumber]
{$2.3 \times 10^{-7}$, True}
Maybe this can help
PadRight[Charting`padList /@ a]
{{1,0},{π,0},{2+3 I,0},{1,2},{3,4},{-2,0}}
Transpose@Thread[PadRight[Flatten@*List /@ a]]