如何将可变长度列表打印为 python 中的列?

How to print variable length lists as columns in python?

我需要一种方法来打印多个不同长度的列表,因为列彼此相邻并用制表符分隔,并且空单元格保持为空或包含一些填充字符(例如“-”)。

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

总结一下:

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

打印在 .txt 文件中:

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

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

>>> 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

的小列表更有效
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))

基准测试:

~$ 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怎么样:

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="-")