我需要一个项目的帮助,我有一个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
非常感谢。
答案 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]])