An easier and more efficient way to combine lists?

I currently have a two lists. The first list contains independent variables $x$, and the second list contains dependent variables in the form of $\{\{f[x]\},\{f[x]\},...,\{f[n][x]\}\}$.

I want to combine them in the form $$\{\{\{x1,f[x1]\},\{x2,f[x2]\},...,\{xn,f[xn]\}\},\{\{x1,f[x1]\},\{x2,f[x2]\},...,\{xn,f[xn]\}\},...,\{\{x1,f[n][x1]\},\{x2,f[n][x2]\},...,\{xn,f[n][xn]\}\}\}$$ ...an easy format for ListPlot.

For some example data:

a = Range;
b = a^2;
c = (a + 1/2)^2;
fa = {b,c};

Now one can easily do this with Table:

Table[{a[[j]], fa[[i, j]]}, {i, Length[fa]}, {j, Length[c]}]

but knowing Mathematica's many functions I thought there might be an easier way. I tried this as well:

Transpose@MapThread[Tuples@{{#1}, #2} &, {a, Transpose@fa}]

but with the multiple Transpose calls, I figured there would be a slight performance hit. And there was (2.854 vs 3.261 seconds for vectors with 1MM elements on my machine).

Is there an easier and more efficient way to combine these lists?

• So in your notation, f[x1] really means f[[1,1]] and not SubValues? – rm -rf Nov 28 '12 at 20:33
• @rm-rf, Nah, it just means f is a data vector that corresponds to the x-values. f is another data vector not related to f. Etc. Feel free to suggest another notation. – kale Nov 28 '12 at 20:38
• Also MapThread[List, {a, #}] & /@ fa will do the job. – garej Dec 26 '15 at 12:02