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 - |
您可以使用
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 - |
在这种情况下,您可以使用
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 |
使用
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="-") |