Python打印列并排

时间:2016-07-14 15:30:14

标签: python loops

我在通过for循环迭代后努力对齐某些数据。我想让每个for循环输出一个单独的列,但没有弄清楚如何实现这一点。我试过用end =''结束。对于新线路,但不会使下一列返回顶部。你能帮忙吗?下面是我正在尝试构建的代码的可测试示例。非常感谢您的帮助。

import time, re, collections, operator

output_list = [['2016-07-12', 'Magazine', 'News Paper #2', 'Podcast', '1234567', '10-10-10-10', 'ABCDEFG', 'Zoo'],
['2016-07-12', 'Book', 'News Paper #2', 'Podcast', '1234567', '10-10-10-10', 'ABCDEFG', 'Zoo'],
['2016-07-13', 'Book', 'News Paper #2', 'Podcast', '1234567', '10-10-10-10', 'ABREF', 'Zoo'],
['2016-07-14', 'Article', 'News Paper #4', 'Radio', '1234567', '10-10-10-10', 'ABCDEFG', 'Zoo'],
['2016-07-15', 'Article', 'News Paper #4', 'Radio', '1234567', '10-10-10-10', 'ABCDEFG', 'Zoo'],
['2016-07-15', 'Snippet', 'News Paper #2', 'Podcast', '1234567', '10-10-10-10', 'ABCDEFG', 'Zoo']]


def count_types():
    #item_1 = mm_counts(0)
    item_2 = mm_counts(1)
    item_3 = mm_counts(2)
    item_4 = mm_counts(3)
    item_5 = mm_counts(4)
    item_6 = mm_counts(5)
    item_7 = mm_counts(6)
    item_8 = mm_counts(7)

print('=' * 90)
print(('Media1    Media2    Media3    Media4    Media5    Media6    Media7'))
print('=' * 90)
def mm_counts(a):
    r = []
    for i in output_list:
        x = (i[a])
        r.append(x)
    y = collections.Counter(r)

    padding = 9
    for k, v in sorted(y.items(), key=operator.itemgetter(1), reverse=True):
        z = (str(k).ljust(13, ' ') + ' ' + (str(v).ljust(5, ' ')))
        print (z)

count_types()

当前输出:

==========================================================================================
Media1    Media2    Media3    Media4    Media5    Media6    Media7
==========================================================================================
Article       2    
Book          2    
Snippet       1    
Magazine      1    
News Paper #2 4    
News Paper #4 2    
Podcast       4    
Radio         2    
1234567       6    
10-10-10-10   6    
ABCDEFG       5    
ABREF         1    
Zoo           6    

期望的输出:

=============================================================================================
Media1       Media2            Media3      Media4      Media5           Media6      Media7
==============================================================================================
Article   2  Magazine       1  Podcast  4  1234567  6  10-10-10-10   6  ABCDEFG  5  Zoo  6 
Book      2  News Paper #2  4  Radio    2               ABREF    1
Snippet   1  News Paper #4  2    
Magazine  1 

1 个答案:

答案 0 :(得分:0)

学习使用.format方法(格式字符串)。您可以指定字段长度,左/中/右对齐,小数位和/或数值的前导零等等。 https://docs.python.org/3/library/string.html#formatspec

一个例子

>>> kvp = [('Newspaper', 47), ('TV', 192), ('Radio', 543)]
>>> fs = '{0[0]:>10s} {0[1]:6d}'
>>> '    '.join( [ fs.format(kv) for kv in kvp ] )
' Newspaper     47            TV    192         Radio    543    '

那里有点进展。 fs是格式字符串。格式字符串中的{...}标记要格式化的项目。在大括号内,:之前的东西标识了要格式化的内容以及之后的内容,如何格式化它。 0[0]0[1].format方法的第一个(仅此处)参数的第一个和第二个元素(必须是可下标的)。 >10s表示对字段宽度为10的字符串进行右对齐。6d表示字段宽度为6的十进制整数。

最后' '.join( [ fs.format(kv) for kv in kvp ] )创建了kvp(即字符串)的格式化元素列表,并将它们连接起来,它们之间有四个空格(但没有四个前导或尾随空格)。

(是的,这是一个部分答案。如果我误解了问题,那么其他人可以回答将正确的实体按正确的顺序格式化为所需的输出行格式#34;对齐"