在不同行中打印列表中的多个项目
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 运算符将这些引用作为单独的参数传递给 zip
。 zip
然后从它的每个参数依次创建长度为 5 的元组来填充元组。但是它的每个参数都是对 same 迭代器 iter(strings)
的引用,因此该迭代器的内容被打包成元组。
我在一个项目中需要帮助,我有一个在 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 运算符将这些引用作为单独的参数传递给 zip
。 zip
然后从它的每个参数依次创建长度为 5 的元组来填充元组。但是它的每个参数都是对 same 迭代器 iter(strings)
的引用,因此该迭代器的内容被打包成元组。