|   | 1 |  initial version  | 
For entries in different rings, you could use a nested list.  The numpy array data structure is similar, with slightly more functionality (like a transpose method).  The latex formatting for numpy arrays probably isn't what you want though, so you can use a simple loop to print the data in the format you want.  Here's an example:
sage: ints = primes_first_n(5)
sage: floats = [random() for _ in range(5)]
sage: rats = [1/n for n in range(5,10)]
sage: polys = [x^n for n in range(2,7)]
sage: from numpy import array
sage: mat = array([ints, floats, rats, polys]).transpose()
sage: mat
array([[2, 0.996565962529, 1/5, x^2],
       [3, 0.803053692297, 1/6, x^3],
       [5, 0.870364288574, 1/7, x^4],
       [7, 0.369733125378, 1/8, x^5],
       [11, 0.0361132712282, 1/9, x^6]], dtype=object)
sage: for row in mat:
....:     print ' & '.join([latex(_) for _ in row]) + ' \\\\'
....:     
2 & 0.996565962529 & \frac{1}{5} & x^{2} \\
3 & 0.803053692297 & \frac{1}{6} & x^{3} \\
5 & 0.870364288574 & \frac{1}{7} & x^{4} \\
7 & 0.369733125378 & \frac{1}{8} & x^{5} \\
11 & 0.0361132712282 & \frac{1}{9} & x^{6} \\
 Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.
 
                
                Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.