我在这里使用python 3而不导入pandas,试图整洁地打印列表的输出。它必须具有不同的列宽。例如。列+2中单词的最大长度。到目前为止,我有一个整洁的输出,但所有行中的所有列都具有相同的间距。 spacing =单词的最大长度。
以下是我所拥有的: 该列表从csv读入并格式化为标记为列表的下列列表。
list = [['0', 'Name', 'at', 'Address', '11111', 'Pl'], ['1', 'Name', 'at', 'Address', '36', 'Crt'],['2', 'Name', 'at', 'Address', '5678', 'cl'],['3', 'Name', 'at', 'Address', '7', 'St'],['']]
col_width = max(len(word) for row in list for word in row) + 2 # padding of 2
for row in list :
print "".join(word.ljust(col_width) for word in row)
输出:
0 Name at Address 11111 Pl
1 Name at Address 36 Crt
2 Name at Address 5678 cl
3 Name at Address 7 St
首选输出:
0. Name at Address 11111 Pl
1. Name at Address 36 Crt
2. Name at Address 5678 cl
3. Name at Address 7 St
我已将行更改为列,但仍然没有区别。我道歉但我在这里不理解什么? 谢谢你的时间。
答案 0 :(得分:1)
您目前正在使用数据中任何字词的最大长度,而不是给定列中的最大长度。您需要计算每列的最大宽度,然后使用它。
为了做到这一点,您可以将数据提供给itertools.zip_longest
以逐列获取数据并存储每列的最大宽度。然后,当您输出数据时,只需将相应的宽度传递给BeanWithRuntimeDependencies bean =
context.getBean(BeanWithRuntimeDependencies.class,
context.getBean(DependencyA.class),
context.getBean(DependencyB.class),
"runtime string", 10);
:
ljust
输出:
from itertools import zip_longest
l = [['0', 'Name', 'at', 'Address', '11111', 'Pl'],
['1', 'Name', 'at', 'Address', '36', 'Crt'],
['2', 'Name', 'at', 'Address', '5678', 'cl'],
['3', 'Name', 'at', 'Address', '7', 'St'],['']]
widths = [max(len(s) for s in x) for x in zip_longest(*l, fillvalue='')]
for row in l :
print("".join(word.ljust(w + 2) for word, w in zip(row, widths)))
更新:假设所有行都有相同数量的列,并且您希望使用不同的填充,则可以使用0 Name at Address 11111 Pl
1 Name at Address 36 Crt
2 Name at Address 5678 cl
3 Name at Address 7 St
并创建一个覆盖某些填充的zip
列:
dict
输出:
DEFAULT = 2
l = [['0', 'Name', 'at', 'Address', '11111', 'Pl'],
['1', 'Name', 'at', 'Address', '36', 'Crt'],
['2', 'Name', 'at', 'Address', '5678', 'cl'],
['3', 'Name', 'at', 'Address', '7', 'St']]
padding = {2: 1}
widths = [max(len(s) for s in x) for x in zip(*l)]
for row in l :
print("".join(word.ljust(w + padding.get(i, DEFAULT))
for i, (word, w) in enumerate(zip(row, widths))))