Python 如何在行和列中显示一长串数字?

Python 如何在行和列中显示一长串数字?,python,list,for-loop,indexing,nested,Python,List,For Loop,Indexing,Nested,我正在尝试从我在第一个函数中创建的列表中打印第二个函数中的表。在控制台上打印时,我当前的代码没有正确对齐,而且它还按从左到右的顺序打印每行,而不是按从上到下的顺序打印每列。我不知道我需要在displayPrimes函数中更改什么 def findPrimes(n): prime_list = [2] for number in range(3, n, 2): if all(number % i != 0 for i in range(2, int(number

我正在尝试从我在第一个函数中创建的列表中打印第二个函数中的表。在控制台上打印时,我当前的代码没有正确对齐,而且它还按从左到右的顺序打印每行,而不是按从上到下的顺序打印每列。我不知道我需要在displayPrimes函数中更改什么

def findPrimes(n):
    prime_list = [2]

    for number in range(3, n, 2):
        if all(number % i != 0 for i in range(2, int(number ** .5) + 1)):
            prime_list.append(number)

    return prime_list

def displayPrimes():
    for row in findPrimes(4027):
        for col in findPrimes(4027):
            product = row * col
            print(product, end = "\t")
            break

# main program
findPrimes(4027)
displayPrimes()

我有一个对初学者来说可能不太容易理解的解决方案,但它允许您指定列的数量

itertools文档中有一个可用于将iterable拆分为n个大小的组/元组。如果您计算出每列有多少项items\u per\u column=math.ceillenprimes/columns,您可以将此数字传递给grouper,然后使用此zip技巧转换返回的iterable:zip*iterable。下面是这个成语的一个例子:

>>> lst = [(1,2,3), (4,5,6)]
>>> list(zip(*lst))
[(1, 4), (2, 5), (3, 6)]
解决方案:

import math
from itertools import zip_longest


def findPrimes(n):
    prime_list = [2]
    for number in range(3, n, 2):
        if all(number % i != 0 for i in range(2, int(number ** .5) + 1)):
            prime_list.append(number)
    return prime_list


def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return zip_longest(*args, fillvalue=fillvalue)


def prime_table(number, columns=8):
    """Rearrange the primes into top to bottom columns."""
    primes = findPrimes(number)
    # Figure out how many items fit into one column.
    items_per_column = math.ceil(len(primes)/columns)  # Round up.
    # `grouper` splits the list into tuples of length items_per_column.
    # Then transpose the groups with `zip(*iterable)`, so that
    # the primes are arranged top to bottom.
    return zip(*grouper(primes, items_per_column, ''))


def print_table(rows):
    for row in rows:
        for item in row:
            print('{:>6}\t'.format(item), end='')
        print()


print_table(prime_table(4027))

打印超过10列或非常大的数字会弄乱表格。

这可能会有所帮助,而不是使用制表符:我很感激,但我需要使用嵌套for循环。这个链接有一些我还没有学过的东西,不能使用。我不是要别人帮我做,只是想帮我弄明白。我可以问一下你想在屏幕上显示什么吗?我想按顺序显示列表中的行和列的表格。它不必是特定的行数或列数,但我只需要整洁地打印列表。它非常正确,但数字按顺序从左到右穿过行,而不是从上到下穿过列。不过我会设法弄清楚的。谢谢你的帮助,我已经换了。请检查一下,太好了!我很感激!forumer444:见。
import math
from itertools import zip_longest


def findPrimes(n):
    prime_list = [2]
    for number in range(3, n, 2):
        if all(number % i != 0 for i in range(2, int(number ** .5) + 1)):
            prime_list.append(number)
    return prime_list


def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return zip_longest(*args, fillvalue=fillvalue)


def prime_table(number, columns=8):
    """Rearrange the primes into top to bottom columns."""
    primes = findPrimes(number)
    # Figure out how many items fit into one column.
    items_per_column = math.ceil(len(primes)/columns)  # Round up.
    # `grouper` splits the list into tuples of length items_per_column.
    # Then transpose the groups with `zip(*iterable)`, so that
    # the primes are arranged top to bottom.
    return zip(*grouper(primes, items_per_column, ''))


def print_table(rows):
    for row in rows:
        for item in row:
            print('{:>6}\t'.format(item), end='')
        print()


print_table(prime_table(4027))