我有一个未知数量的项目列表,让我们说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)
另一种选择,打印后的逗号表示没有换行符
它需要调用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)
这里有很多答案说你怎么做,但没有人解释如何解决这个问题.我想用来计算循环的技巧是手工编写前几次迭代,然后寻找一个模式.另外,首先忽略边缘情况.在这里,明显的边缘情况是:如果列表的大小不是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方法仍然有效:)