You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Python enumerate输出及print_table异常输出的技术问询

问题解答

为什么会出现(0,0)这类输出?

你对enumerate()的用法理解有误:

  • enumerate(可迭代对象)会返回由(索引, 元素)组成的元组序列。
  • 你的print_table函数里,第一层循环for words in enumerate(data),这里的words其实是元组,比如第一个元组是(0, ['apples', 'oranges', 'cherries', 'banana']),第二个是(1, ['Alice', 'Bob', 'Carol', 'David']),第三个是(2, ['dogs', 'cats', 'moose', 'goose'])。
  • 然后你又嵌套了for word in enumerate(words),这相当于对每个元组再做enumerate:比如对元组(0, ['apples', ...])做enumerate,会得到(0, 0)(第一个元素的索引0,值0)和(1, ['apples', ...])(第二个元素的索引1,值是子列表),这就是你看到的那些奇怪输出的来源。

修正后的代码

先修正calculate_widht里的拼写错误(widht→width,lenght→length),再重新实现print_table的逻辑——要实现右对齐表格,需要按列遍历数据(预期输出每行对应原数据所有子列表的第n个元素),用计算好的列宽做右对齐:

def calculate_width(data):
    col_width = [0] * len(data)
    for i, words in enumerate(data):
        max_length = 0
        for word in words:
            if len(word) > max_length:
                max_length = len(word)
        col_width[i] = max_length
    return col_width


def print_table(col_widths, data):
    # 按行遍历(子列表的元素索引)
    for row_idx in range(len(data[0])):
        row = []
        # 遍历每一列,取出对应元素并右对齐
        for col_idx in range(len(data)):
            word = data[col_idx][row_idx]
            row.append(word.rjust(col_widths[col_idx]))
        # 拼接成一行输出
        print(' '.join(row))


def main():
    data = [['apples', 'oranges', 'cherries', 'banana'],
            ['Alice', 'Bob', 'Carol', 'David'],
            ['dogs', 'cats', 'moose', 'goose']]
    widths = calculate_width(data)
    print_table(widths, data)


if __name__ == '__main__':
    main()

运行结果

运行后会得到预期输出:

apples Alice  dogs
  oranges   Bob  cats
 cherries Carol moose
   banana David goose

内容的提问来源于stack exchange,提问作者Jarne Vercruysse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 04:20:26