在不同行中打印列表中的多个项目

Printing multiple items in list in different lines

我在一个项目中需要帮助,我有一个在 25 项列表中的板。我怎样才能打印,以便它每 5 个项目跳过一行。如果我有这个:

    myList = []
    for i in range (1,25):
        myList.append(i)

我已经查看了 '\n'print(myList, end=''),但我没有任何进展。我想要这样的最终结果:

    1  2  3  4  5
    6  7  8  9  10
    11 12 13 14 15
    16 17 18 19 20
    21 22 23 24 25

非常感谢。

要获得从 1 到 25 的列表,您需要执行 range(1, 26)。除此之外,您可以按照您要求的格式打印它:

numbers = range(1, 26)
for i, elem in enumerate(numbers):
    if i % 5 == 0:
        print()
    print(str(elem).ljust(3), end='')
print()

输出:

1  2  3  4  5  
6  7  8  9  10 
11 12 13 14 15 
16 17 18 19 20 
21 22 23 24 25

enumerate(list) returns 一对 (index, element) 用于列表中的每个元素。 str.ljust(n) 左对齐字符串,使其长度为 n 个字符,其余部分用空格填充。

编辑:或者,正如@PM_2Ring 在评论中提出的那样:

numbers = range(1, 26)
for i, elem in enumerate(numbers, 1):
    print(str(elem).ljust(3), end='\n' if i % 5 == 0 else '')

作为 str(elem).ljust(3) 的替代方法,您还可以使用 '{:<3}'.format(elem) (Python 2.7+) 或 '{0:<3}'.format(elem) (Python <2.7)

from math import sqrt

r = range(25)
n =int(sqrt(len(r)))

for i in xrange(0,n):
    print "\t".join([str(s) for s in r[i*n:i*n+n]])

循环每五个元素并添加中间数字:

for y in range(1, 26, 5):
    print "\t{0}\t{1}\t{2}\t{3}\t{4}".format(y, y+1, y+2, y+3, y+4)

对于每行更多的项目,双循环更容易:

for y in range(1, 26, 5):
    for x in range(y, y+5):
        out += "\t" + str(x)
    out += "\n"
print out

我这里用的是制表符,你也可以用string的ljust函数

使用一些地图:

myList = range(1, 26)
for line in map(lambda x: myList[x:x+5], range(0, len(myList), 5)):
    print '\t'.join(map(str, line))

1   2   3   4   5
6   7   8   9   10
11  12  13  14  15
16  17  18  19  20
21  22  23  24  25
for i in range(len(myList)/5+1):
    print " ".join([str(j) for j in myList[5*i:5*i+5]])

您可以使用数组,因为您可以轻松地将它们重塑为您的电路板尺寸:

import numpy as np
array = np.arange(1,26)
array = array.reshape((5,5))

for line in range(0,5):
    print ' '.join(map(str, array[line,:]))

只是为了好玩,这里有一个高深莫测的功能单行:

print('\n'.join(map(''.join, zip(*[iter(map('{0:>3}'.format, myList))] * 5))))

请注意,虽然这可能看起来很酷(对某些读者而言),但实际上不建议在实际程序中使用如此密集的嵌套代码。

这里将本质上相同的算法分开,以使其更具可读性,其中一个 map 调用转换为列表理解:

strings = map('{0:>3}'.format, myList)
chunked = zip(*[iter(strings)] * 5)
rows = [''.join(s) for s in chunked]
print '\n'.join(rows)

这个算法最棘手的部分是 zip(*[iter(strings)] * 5)[iter(strings)] * 5 部分在 strings 可迭代对象上创建了一个包含 5 个对迭代器的引用的列表。 * splat 运算符将这些引用作为单独的参数传递给 zipzip 然后从它的每个参数依次创建长度为 5 的元组来填充元组。但是它的每个参数都是对 same 迭代器 iter(strings) 的引用,因此该迭代器的内容被打包成元组。