【问题标题】:Python printing list in columns [duplicate]列中的Python打印列表[重复]
【发布时间】:2015-11-01 15:19:33
【问题描述】:

如何从列中的列表中打印 Python 值?

我对它们进行了排序,但我不知道如何以两种方式打印它们 例如:

list=['apricot','banana','apple','car','coconut','baloon','bubble']

第一个:

apricot      bubble     ...
apple        car        
baloon       coconut

第二种方式:

apricot    apple     baloon   
bubble     car      coconut

我还想将所有内容与 ljust/rjust 对齐。

我尝试过这样的事情:

print " ".join(word.ljust(8) for word in list)

但它只显示在第一个示例中。我不知道这样做是否正确。

【问题讨论】:

  • 没有内置的方法可以做到这一点,你必须自己编程。
  • 你想解决这个问题吗?
  • 我尝试过这样的事情: print " ".join(word.ljust(8) for word in list) 但它只显示在第一个示例中。我不知道这样做是否正确。
  • 您有什么要求?函数应该自己计算列数还是应该作为函数的第二个参数?
  • 我不介意把它作为第二个参数

标签: python


【解决方案1】:
the_list = ['apricot','banana','apple','car','coconut','baloon','bubble']
num_columns = 3

for count, item in enumerate(sorted(the_list), 1):
    print item.ljust(10),
    if count % num_columns == 0:
        print

输出:

apple      apricot    baloon    
banana     bubble     car       
coconut

更新: 这是解决您给出的两个示例的综合解决方案。我为此创建了一个函数,并对代码进行了注释,以便清楚地了解它正在做什么。

def print_sorted_list(data, rows=0, columns=0, ljust=10):
    """
    Prints sorted item of the list data structure formated using
    the rows and columns parameters
    """

    if not data:
        return

    if rows:
        # column-wise sorting
        # we must know the number of rows to print on each column
        # before we print the next column. But since we cannot
        # move the cursor backwards (unless using ncurses library)
        # we have to know what each row with look like upfront
        # so we are basically printing the rows line by line instead
        # of printing column by column
        lines = {}
        for count, item in enumerate(sorted(data)):
            lines.setdefault(count % rows, []).append(item)
        for key, value in sorted(lines.items()):
            for item in value:
                print item.ljust(ljust),
            print
    elif columns:
        # row-wise sorting
        # we just need to know how many columns should a row have
        # before we print the next row on the next line.
        for count, item in enumerate(sorted(data), 1):
            print item.ljust(ljust),
            if count % columns == 0:
                print
    else:
        print sorted(data)  # the default print behaviour


if __name__ == '__main__':
    the_list = ['apricot','banana','apple','car','coconut','baloon','bubble']
    print_sorted_list(the_list)
    print_sorted_list(the_list, rows=3)
    print_sorted_list(the_list, columns=3)

【讨论】:

  • 非常感谢 :) 你能告诉我,如果有办法像我在第一个例子中展示的那样打印它吗?
  • @bartekshadow 我已经更新了我的答案以包含一个也适合您的第一个示例的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
  • 2022-08-08
  • 1970-01-01
相关资源
最近更新 更多