【问题标题】:Python: Is there a way to pretty-print a list?Python:有没有办法漂亮地打印一个列表?
【发布时间】:2015-02-12 00:47:13
【问题描述】:

我的列表产生以下输出:(运行 Python 3.4)

('MSG1', 3030)
('MEMORYSPACE', 3039)
('NEWLINE', 3040)
('NEG48', 3041)

有没有办法让所有的数字像一列一样排列?谢谢。 我的代码是一个简单的打印语句:

for element in data:
    print (element) 

【问题讨论】:

  • 查找pprint,标准漂亮打印模块。
  • pprint 对这样的嵌套迭代没有任何好处。

标签: python python-3.x


【解决方案1】:

你可以根据最长的词来证明:

longest = max([len(x[0]) for x in data])

for j in data:
    a = j[0].ljust(longest)
    b = str(j[1])
    print(' '.join([a, b]))

这是输出:

MSG1        3030
MEMORYSPACE 3039
NEWLINE     3040
NEG48       3041

【讨论】:

  • 你运行的是什么版本的 Python?
  • 我正在运行 3.4 版
【解决方案2】:

你试过format吗?

max_len = max([len(x[0]) for x in data])

for element in data:
    print '{value0:{width0}} {value1}'.format(value0=element[0],
                                              width0=max_len,
                                              value1=element[1])

样本输出:

MSG1        3030
MEMORYSPACE 3039
NEWLINE     3040
NEG48       3041

您还可以通过将> 添加到格式说明符来右对齐:

    ...
    print '{value0:>{width0}} {value1}'.format(
    ...

生产:

       MSG1 3030
MEMORYSPACE 3039
    NEWLINE 3040
      NEG48 3041

【讨论】:

  • 我不知道列数,这只是一个例子
  • 您可以计算列数(如已接受的答案),然后使用format。
  • 答案已更新以计算列数。希望对您有所帮助!
【解决方案3】:

你可以使用'\t':

for element in data:
    print str(element[0])+'\t'+str(element[1])

MSG1    3030
MEMORYSPACE 3039
NEWLINE 3040
NEG48   3041

很遗憾,因为您的第一个元素有时较长,请先尝试打印数字:

for element in data:
    print str(element[1])+'\t'+str(element[0])

3030    MSG1
3039    MEMORYSPACE
3040    NEWLINE
3041    NEG48

【讨论】:

  • 我认为 op 正在运行 3。
【解决方案4】:

你可以试试下面的。由于第二个元素是整数值,打印前需要将其转换为string类型。

>>> for x,y in data:
        print(x+"\t"+str(y))


MSG1    3030
MEMORYSPACE 3039

【讨论】:

  • MEMORYSPACE前面的那个没有排队
  • 一点也不漂亮。
【解决方案5】:

如果可能,我会先打印号码:

for i in lst:
    print i[1],'\t',i[0]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 2020-09-16
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多