Python 在列表的单独行上打印一行中的5项?

Python 在列表的单独行上打印一行中的5项?,python,Python,我有一份数量不详的物品清单,比如说26件。 比方说 list=['a','b','c','d','e','f','g','h', 'i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'] 如何像这样打印: abcde fghij klmno pqrst uvwxy z ?? 非常感谢你。 尝试: start=0 对于列表中的项目: 如果开始>>列表(chunker([1,2,3,4,5,3))

我有一份数量不详的物品清单,比如说26件。 比方说

list=['a','b','c','d','e','f','g','h',
'i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
如何像这样打印:

abcde

fghij

klmno

pqrst

uvwxy

z
?? 非常感谢你。 尝试:

start=0
对于列表中的项目:
如果开始<5:
文件写入(“%s”%item)
开始=开始+5
其他:
文件写入(“%s”%item)
开始=0
start=0
对于列表中的项目:
如果开始<4:
文件写入(“%s”%item)
开始=开始+1
否则:#一旦程序写入4项,则写入第5项和两个换行符
文件写入(“%s\n\n”%item)
开始=0

你可以通过列表理解简单地做到这一点:
“\n”.join([''.join(lst[i:i+5]),对于xrange(0,len(lst),5)中的i)
这里将给出一个整数列表,这些整数以
5
的距离等距排列,然后我们使用

然后,该方法按照名称所示,通过放置给定的字符连接列表的元素,并返回一个字符串

lst = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

print "\n".join(["".join(lst[i:i+5]) for i in xrange(0,len(lst),5)])

>>> abcde
    fghij
    klmno
    pqrst
    uvwxy
    z

它需要为循环调用
join
函数可以解决这个问题

l=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']

for i in range(len(l)/5+1):
    print "".join(l[i*5:(i+1)*5]) + "\n"
演示:

这将有助于:

n = m = 0
while m < len(l):
    m = m+5
    print("".join(l[n:m]))
    n = m
n=m=0
当m

但我相信有一种更为通灵的方式来完成这项任务。

你可以做一些像下面这样简单的事情,把你的列表分成子列表,这看起来也更通灵。然后你想怎么打印就怎么打印。 也不要使用列表,因为它是一个关键字(不推荐)


另一种选择是,打印后的逗号表示没有换行符,这里有很多答案告诉你怎么做,但没有解释怎么做。我喜欢使用的计算循环的技巧是手工编写前几个迭代,然后查找模式。此外,请先忽略边缘情况。这里,一个明显的边缘情况是:如果列表的大小不是5的倍数怎么办?别担心!在这个答案中,我将尽量避免使用任何花哨的语言特性,这些特性将使我们的工作变得更简单,而不是手动地、艰难地完成所有工作。这样我们就可以专注于基本思想,而不是很酷的Python特性。(Python有很多很酷的特性。老实说,我不确定我是否能抵制它们,但我会尝试。)我将使用print语句而不是file.write
,因为我认为它更容易阅读。您甚至可以使用打印语句写入文件:
print>>文件,l[0]
,不需要所有这些
%s
字符串:)这是版本0:

print l[0], l[1], l[2], l[3], l[4]
print l[5], l[6], l[7], l[8], l[9]
这个循环非常简单,两次迭代可能就足够了,但有时您可能需要更多。这里是版本1(注意,我们仍然假设列表的大小是5的倍数):


这是我的最终版本。这里很多人建议使用
join
。这是解决这个问题的一个好主意,你也可以使用它。问题是,如果你有不同的问题,那就没用了。DIY方法即使在Python没有预先准备好的解决方案的情况下也能工作:)

只是为了证明我真的是一个未经修改的JAPH正则表达式才是最好的选择

import re
q="".join(lst)
for x in re.finditer('.{,5}',q)
  print x.group()

如果您正在处理一个iterable(如文件),它可能太大而无法装入RAM,您可以使用如下内容:

abcde

fghij

klmno

pqrst

uvwxy

z
从itertools导入izip_
def chunker(iterable,n,fillvalue=None):
“”“与itertools.gropper类似,但不排除任何值。
>>>列表(chunker([1,2,3,4,5,3))
[[1, 2, 3], [4, 5]]
"""
如果n<1:
raise VALUERROR(“无法按n=%d“%n”分块)
args=[iter(iterable)]*n
返回(
[e表示t中的e,如果e不是无]
对于izip_中最长的t(*参数,fillvalue=fillvalue)
)
将open('some_file')作为f:
对于chunker(f,5)中的行:
打印“”连接(行)
如果RAM不是一个考虑因素,则更可取,因为它的速度要快得多。

Python3+简单的方法

lst=['a','b','c','d','e','f','g','h','i','j','k','l','m',
     'n','o','p','q','r','s','t','u','v','w','x','y','z']

for ind, smb in enumerate(lst):
    print(smb, end='')
    if ind%5 == 4: 
        print('\n')

我认为写这篇文章最简洁的方式是

list=['a','b','c','d','e','f','g','h', 'i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']

for i in range(0, len(list), 5):
    print(*list[i:i+5], sep='')

你好,叶国伟。我认为你做得很好,除了start=start+5行。您正在编写一个项目并跳过下四个项目,这不是您想要的。下面有两个很好的答案,因此我不会再添加一个,而是考虑使用“{0}.format(item)”代替旧语法“%s”%item。此外,还需要添加换行符。i、 e.在您的
else
部分。写
“%s\n”
而不是
“%s”
一些答案不能产生您在示例中给出的确切结果。即,每一打印行之间有一空行或每一行中的元素之间没有空格。其中一些答案可以很容易地调整以产生准确的结果,但其他答案则不能。你能说明打印结果的格式是重要的还是每行打印X个项目的概念吗?这只是打印的概念(实际上是写入txt文件)。谢谢。还有一个更简单的例子,没有连接字符串和空行。是的,在我知道之前n=m=0!你应该编辑你的帖子。这是一个好习惯,使您的代码副本可复制,以便人们可以快速测试它!虽然打印后的逗号是一个很好的技巧,但在本例中,每5个元素使用6个打印语句,而通过切片数组只能使用一个。这对一些项目来说并不重要,但请记住,打印速度很慢。+1。仅使用模数回答,这是IMO处理此类问题最干净(如果不是最好的话)的方式。@Reti43:您不认为像(当前)最上面的答案那样对数组进行切片和连接比仅打印更昂贵吗?@user1021726切片和连接数组比重复的单字符打印语句更便宜。您可以对此进行计时测试,Python中的打印速度非常慢。我用了timeit图书馆。python-m timeit-s“import string”-s“lst=list(string.ascii_lowercase)”,用于enumarat中的i,a
print l[0], l[1], l[2], l[3], l[4]
print l[5], l[6], l[7], l[8], l[9]
idx=0
while idx < len(l):
  print l[idx], l[idx+1], l[idx+2], l[idx+3], l[idx+4]
  a += 5
idx=0
while idx < len(l):
  print l[index],
  if idx+1 < len(l): print l[idx+1],
  if idx+2 < len(l): print l[idx+2],
  if idx+3 < len(l): print l[idx+3],
  if idx+4 < len(l): print l[idx+4]
  idx += 5
idx=0
while idx < len(l):
  b = 0
  while b < 5:
    if idx+b < len(l): print l[idx+b],
    b += 1
  print
  idx += 5
idx=0
while idx < len(l):
  print l[idx],
  if idx % 5 == 4: print
  idx += 1
for idx, item in enumerate(l):
  print item,
  if idx % 5 == 4: print
import re
q="".join(lst)
for x in re.finditer('.{,5}',q)
  print x.group()
lst=['a','b','c','d','e','f','g','h','i','j','k','l','m',
     'n','o','p','q','r','s','t','u','v','w','x','y','z']

for ind, smb in enumerate(lst):
    print(smb, end='')
    if ind%5 == 4: 
        print('\n')
list=['a','b','c','d','e','f','g','h', 'i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']

for i in range(0, len(list), 5):
    print(*list[i:i+5], sep='')