在单独的行中连续打印5个项目以获取列表?

Ka-*_*Yip 11 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']
Run Code Online (Sandbox Code Playgroud)

如何打印像这样:

abcde

fghij

klmno

pqrst

uvwxy

z
Run Code Online (Sandbox Code Playgroud)

?非常感谢你.尝试:

    start = 0
    for item in list:
        if start < 5:
            thefile.write("%s" % item)
            start = start + 5
        else:
            thefile.write("%s" % item)
            start = 0
Run Code Online (Sandbox Code Playgroud)

Zda*_*daR 14

通过列表解析你可以简单的做到这一点:"\n".join(["".join(lst[i:i+5]) for i in xrange(0,len(lst),5)])xrange(start, end, interval)这里会给它们在距离等距整数列表5,那么我们切片定列表中小块用每个长度为5 列表切片.

然后该.join()方法执行名称建议,它通过放置给定字符并返回字符串来连接列表的元素.

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
Run Code Online (Sandbox Code Playgroud)


dab*_*and 14

for i, a in enumerate(A):
    print a, 
    if i % 5 == 4: 
        print "\n"
Run Code Online (Sandbox Code Playgroud)

另一种选择,打印后的逗号表示没有换行符


Bur*_*ing 8

它需要调用for-loop,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"
Run Code Online (Sandbox Code Playgroud)

演示:

abcde

fghij

klmno

pqrst

uvwxy

z
Run Code Online (Sandbox Code Playgroud)


Mar*_* VY 6

这里有很多答案说你怎么做,但没有人解释如何解决这个问题.我想用来计算循环的技巧是手工编写前几次迭代,然后寻找一个模式.另外,首先忽略边缘情况.在这里,明显的边缘情况是:如果列表的大小不是5的倍数怎么办?别担心!我将尝试避免使用任何花哨的语言功能,这将使我们在这个答案中更容易,而是手动,艰难的方式做所有事情.这样我们就可以专注于基本思想,而不是酷炫的Python功能.(Python有很多很酷的功能.老实说,我不确定我是否可以抵抗它们,但我会尝试.)我将使用print语句代替thefile.write,因为我觉得它更容易阅读.你甚至可以使用print语句写入文件: print >> thefile, 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]
Run Code Online (Sandbox Code Playgroud)

这个循环很简单,两次迭代可能就足够了,但有时你可能需要更多.这是版本1(请注意,我们仍然假设列表的大小是5的倍数):

idx=0
while idx < len(l):
  print l[idx], l[idx+1], l[idx+2], l[idx+3], l[idx+4]
  a += 5
Run Code Online (Sandbox Code Playgroud)

最后,我们已经准备好处理大多数数字不是5的倍数的烦人事实.在这种情况下,上述代码基本上会崩溃.让我们试着修复它而不要太费劲.做这件事有很多种方法; 这是我提出的那个; 在你偷看我所做的事情之前,我们鼓励你试着想出自己的想法.(或者,如果你愿意,可以偷看.)第2版:

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
Run Code Online (Sandbox Code Playgroud)

我们最终有代码可以做我们想要的,但它并不漂亮.它是如此重复,以至于我使用复制/粘贴来编写它,它也不是很对称.但我们知道如何处理重复代码:使用循环!版本3:

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
Run Code Online (Sandbox Code Playgroud)

它不再重复,但它没有变得更短.这可能是查看我们的代码并查看它是否反映最佳解决方案的好时机,或者仅仅反映了我们到达此处所采用的路径.也许有一种更简单的方法.实际上,为什么我们以五块为单位处理事物呢?我们一次去一个,但特别对待每五件物品.让我们重新开始.第4版:

idx=0
while idx < len(l):
  print l[idx],
  if idx % 5 == 4: print
  idx += 1
Run Code Online (Sandbox Code Playgroud)

现在这更漂亮了!在这一点上,我们努力工作,并通过查看Python有哪些很酷的功能来使这些代码变得更好来奖励自己.我们发现dabhand的答案几乎就是我们所拥有的,除了它使用的enumerate是Python所做的工作是跟踪我们所处的数字.它只为我们节省了两行,但是如此短的循环,它几乎将我们的行数减少了一半:)版本5:

for idx, item in enumerate(l):
  print item,
  if idx % 5 == 4: print
Run Code Online (Sandbox Code Playgroud)

这是我的最终版本.这里有很多人建议使用join.对于这个问题,这是一个好主意,你也可以使用它.麻烦的是,如果你遇到不同的问题,它将无济于事.即使Python没有预先制作的解决方案,DIY方法仍然有效:)