【问题标题】:Python Table Alignment/Padding?Python表格对齐/填充?
【发布时间】:2017-07-25 15:42:08
【问题描述】:

我有一个函数,它当前需要一个列表并创建一个表格,计算每个项目在列表中出现的次数。当我使用单个字符项运行它时,频率列以一个很好的偶数行返回。但是当项目超过一个字符时,频率就会全部偏离对齐。如何在 Python 中解决此问题?

这是一张带有这两个示例的结果的图片(因为我不知道如何制作表格......):

freqTable([1, 2, 3, 3, 1, 4, 5]) 

freqTable(['CIS', 'CIS', 'CIS', 'J', 'Psy', 'Psy'])

如何修复对齐方式?

编辑:它由 3 个函数组成

def drawTable(freqD):

    iteml = list(freqD.keys())
    iteml.sort()

    title = 'ITEM' + (' '*2) + 'FREQUENCY'
    print(title)

    for item in iteml:
        print(item, ' '*3, freqD[item])

    return None

def genFreqTable(alist):

    freqD = {}

    for item in alist:
        if item in freqD:
            freqD[item] += 1
        else:
            freqD[item] = 1

    return freqD


def freqTable(alist):

    freqD = genFreqTable(alist)
    drawTable(freqD)

    return None

这里是测试用例 频率表([1, 2, 3, 4]) freqTable(['CIS', 'CIS', 'CIS', 'J', 'Psy', 'Psy'

【问题讨论】:

  • 你的功能在哪里?它看起来怎么样?
  • 什么是freqTable?请出示您的代码。请粘贴文本,而不是图像。这样我们就可以复制文本并自己尝试。
  • 做...忘记添加了。立即编辑
  • 顺便说一下,1, 2, 3, 3, 1, 4, 5 不是单个字符,它们是整数对象。
  • 添加了测试用例的代码和文本

标签: python alignment


【解决方案1】:

您必须使用格式化输出进行打印,例如:

print("%-4s\t%3d" % (item, freqD[item]))

【讨论】:

    【解决方案2】:

    你的问题是关于命名两个 tulpes 有点令人困惑,同名 freqTable

    freqTable([1, 2, 3, 3, 1, 4, 5])
    

    freqTable(['CIS', 'CIS', 'CIS', 'J', 'Psy', 'Psy'])
    

    通常最后一个声明会覆盖另一个。

    关于

    #tuples and lists are the same thing, but a tuple cannot be changed
    # a list variable : [] or <varname> : mylist
    mylist : list = [] 
    
    # a tuple : () or <varname> : mytuple
    mytuple : tuple = () 
    

    表格中元素的正确对齐:


    颜色由 colorama:

    from colorama import Fore, Style
    
    
    coins = [
        ["NAME", "#", "Price", "Change (%)"],
        ["Bitcoin", 1, "$7,430.07", 1.22],
        ["Ethereum", 2, "$461.02", -3.43],
        ["XRP", 3, "$0.46150", -3.90],
        ["Bitcoin Cash", 4, "$804.32", -1.70],
        ["EOS", 5, "$8.11", -4.29],
        ["Stellar", 6, "$0.29635", 0.91],
    ]
    
    dash = "-" * 60
    
    
    def color(val):
    
        if val > 0:
            out = Fore.RED + str(val) + Style.RESET_ALL
        else:
            out = Fore.GREEN + str(val) + Style.RESET_ALL
        return out
    
    
    for i in range(len(coins)):
        if i == 0:
            print(dash)
            print(
                "{:<15s}{:>6s}{:>20s}{:>15s}".format(
                    coins[i][0], coins[i][1], coins[i][2], coins[i][3]
                )
            )
            print(dash)
        else:
            print(
                "{:<15s}{:>6d}{:>20s}{:>21s}".format(
                    coins[i][0], coins[i][1], coins[i][2], color(coins[i][3])
                )
            )
    

    没有颜色(去掉导入colorama

    def color(val):
    return str(val)
    

    输出:

    ------------------------------------------------------------
    NAME                #               Price     Change (%)
    ------------------------------------------------------------
    Bitcoin             1           $7,430.07        1.22
    Ethereum            2             $461.02       -3.43
    XRP                 3            $0.46150        -3.9
    Bitcoin Cash        4             $804.32        -1.7
    EOS                 5               $8.11       -4.29
    Stellar             6            $0.29635        0.91
    

    ------------------------------------------------------------
    NAME, #, Price, Change (%)
    ------------------------------------------------------------
    Bitcoin, 1, $7,430.07, 1.22
    Ethereum, 2, $461.02, -3.43
    XRP, 3, $0.46150, -3.9
    Bitcoin Cash, 4, $804.32, -1.7
    EOS, 5, $8.11, -4.29
    Stellar, 6, $0.29635, 0.91
    

    REF - 更多信息:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      • 2015-09-28
      • 1970-01-01
      • 2018-07-27
      相关资源
      最近更新 更多