如何以行和列显示一长串数字?

2024-10-01 07:49:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从第一个函数创建的列表中打印第二个函数中的表。当打印到控制台时,我当前的代码没有正确排列,而且它也是按“从左到右”的顺序打印每一行,而不是按“从上到下”的顺序打印每列。我不知道需要在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()

Tags: 函数innumber列表for顺序defrange
2条回答

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

在itertools文档中有一个grouper recipe,您可以使用它将iterable拆分为n个大小的组/元组。如果计算出每列(items_per_column = math.ceil(len(primes)/columns))有多少项,可以将这个数字传递给grouper,然后使用这个zip技巧来转置返回的iterable:zip(*iterable)。下面是这个成语的演示:

>>> lst = [(1,2,3), (4,5,6)]
>>> list(zip(*lst))
[(1, 4), (2, 5), (3, 6)]

解决方案:

^{pr2}$

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

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(number, rows=100):
    result_list = [[] for _ in range(rows)]
    primes = findPrimes(number)
    for idx, item in enumerate(primes):
        row_idx = idx % rows
        result_list[row_idx].append("%6d" % item)

    result_str = '\n'.join(['\t'.join(i) for i in result_list])
    return result_str

print(displayPrimes(4027))

相关问题 更多 >