Given:
String[] list1 = new String[] { 'a','b','c' };
String[] list2 = new String[] [ 'd','e','f' };
If you wanted it so that [0][0] was 'a' and [1][0] was 'd' (I kind of think this is what you meant, you can:
List<List<String>> list3 = new List<List<String>> {
list1, list2
};
// Output: [ [a,b,c], [d,e,f] ]
If you truly meant that you wanted it the other way around, such that the final dimensions would be [3x2], rather than the above, which would be [2x3], you do need to use a loop:
List<List<String>> list3 = new List<List<String>>();
for(Integer i = 0; i < list1.size(); i++) {
list3.add(new String[] { list1[i], list2[i] });
}
// Output: [ [a,d], [b,e], [c,f] ]
If you have an indeterminate number of lists, you'd need a nested loop. This also presumes no error checking.