如何将可变长度列表打印为 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="-")
我需要一种方法来打印多个不同长度的列表,因为列彼此相邻并用制表符分隔,并且空单元格保持为空或包含一些填充字符(例如“-”)。
到目前为止尝试的方法对不同长度的列表都不起作用,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="-")