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

时间:2015-12-02 11:04:08

标签: python list for-loop printing newline

我需要一个项目的帮助,我有一个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

非常感谢。

7 个答案:

答案 0 :(得分:2)

要获得从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)为列表中的每个元素返回一对(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)

答案 1 :(得分:1)

for i in range(len(myList)/5+1):
    print " ".join([str(j) for j in myList[5*i:5*i+5]])

答案 2 :(得分:1)

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

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,:]))

答案 3 :(得分:1)

只是为了好玩,这是一个难以理解的功能性单行:

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 iterable上的迭代器的5个引用的列表。 * splat运算符将这些引用传递给zip作为单独的参数。然后zip依次创建长度为5的元组,从其每个参数中绘制以填充元组。但是它的每个参数都是对相同的迭代器iter(strings)的引用,因此该迭代器的内容被打包成元组。

答案 4 :(得分:0)

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

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

我在这里使用了制表符,但你也可以使用字符串的ljust函数。

答案 5 :(得分:0)

使用一些地图:

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

答案 6 :(得分:-1)

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]])