如何在python中打印变量列表作为列?

How to print variable length lists as columns in python?

我需要一种方法来打印几个不同长度的列表,作为相邻的列,用制表符分隔,空单元格保持为空或包含一些填充字符(例如"—")。

到目前为止尝试的方法还没有适用于不同长度的列表,numpy也没有像我预期的那样工作。

总结:

1
listname = [[1,2,3],[4,5,6,7,8],[9,10,11,12]]

在.txt文件中这样打印:

1
2
3
4
5
1    4    9
2    5    10
3    6    11
-    7    12
-    8    -


您可以使用itertools.izip_longest。要在较长的序列中填充None空间,可以使用fillvalue(谢谢@szxk):

1
2
3
4
5
6
7
8
9
10
>>> import itertools
>>> listname = [[1,2,3],[4,5,6,7,8],[9,10,11,12]]
>>> for x in itertools.izip_longest(*listname, fillvalue="-"):
...     print '\t'.join([str(e) for e in x])
...
1   4   9
2   5   10
3   6   11
-   7   12
-   8   -


在这种情况下,您可以使用zip函数,这对于itertools.izip的小列表更有效。

1
2
3
4
5
listname = [[1,2,3],[4,5,6,7,8],[9,10,11,12]]

with open('a.txt',w) as f:
   for tup in zip(*listname) :
          f.write('\t'.join(map(str,tup))

基准点:

1
2
3
4
~$ python -m timeit"import itertools;listname = [[1,2,3],[4,5,6,7,8],[9,10,11,12]];itertools.izip_longest(*listname)"
1000000 loops, best of 3: 1.13 usec per loop
~$ python -m timeit"listname = [[1,2,3],[4,5,6,7,8],[9,10,11,12]];zip(*listname)"
1000000 loops, best of 3: 0.67 usec per loop


使用pandas怎么样?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
In [38]: listname = [[1,2,3],[4,5,6,7,8],[9,10,11,12]]

In [39]: import pandas as pd

In [40]: df = pd.DataFrame(listname, dtype=object)

In [41]: df.T
Out[41]:
      0  1     2
0     1  4     9
1     2  5    10
2     3  6    11
3  None  7    12
4  None  8  None

[5 rows x 3 columns]

In [42]: df.T.to_csv("my_file.txt", index=False, header=False, sep="\t", na_rep="-")