我有一个未知数量的项目列表,比方说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
for item in list:
if start < 5:
thefile.write("%s" % item)
start = start + 5
else:
thefile.write("%s" % item)
start = 0
答案 0 :(得分:14)
你可以通过列表理解来简单地做到这一点:"\n".join(["".join(lst[i:i+5]) for i in xrange(0,len(lst),5)])
这里的xrange(start, end, interval)
会给出一个在5
距离上等距的整数列表,然后我们对给定的列表进行切片通过list slicing使用长度为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
答案 1 :(得分:13)
for i, a in enumerate(A):
print a,
if i % 5 == 4:
print "\n"
另一种选择,打印后的逗号表示没有换行符
答案 2 :(得分: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"
演示:
abcde
fghij
klmno
pqrst
uvwxy
z
答案 3 :(得分: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]
这个循环很简单,两次迭代可能就足够了,但有时你可能需要更多。这是第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
最后,我们已经准备好处理大多数数字不是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
我们终于拥有了我们想要的代码,但它并不漂亮。它是如此重复以至于我使用复制/粘贴来编写它,它也不是非常对称的。但我们知道如何处理重复代码:使用循环!第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
它不再重复,但它没有变短。这可能是查看我们的代码并查看它是否反映最佳解决方案的好时机,或者仅仅反映了我们到达此处所采用的路径。也许有一种更简单的方法。实际上,为什么我们以五块为单位处理事物呢?我们一次去一个,但特别对待每五件物品。让我们重新开始吧。第4版:
idx=0
while idx < len(l):
print l[idx],
if idx % 5 == 4: print
idx += 1
现在它更漂亮了!在这一点上,我们努力工作,并通过观察Python有哪些很酷的功能来使这些代码变得更好,从而奖励自己。我们发现dabhand的答案几乎就是我们所拥有的,只不过它使用enumerate
,因此Python可以跟踪我们所依赖的数字。它只为我们节省了两行,但是如此短的循环,它几乎将我们的行数减少了一半:)版本5:
for idx, item in enumerate(l):
print item,
if idx % 5 == 4: print
那是我的最终版本。这里有很多人建议使用join
。对于这个问题,这是一个好主意,你也可以使用它。麻烦的是,如果你有不同的问题,它将无济于事。即使Python没有预先解决的解决方案,DIY方法仍然有效:)
答案 4 :(得分:4)
这将有效:
n = m = 0
while m < len(l):
m = m+5
print("".join(l[n:m]))
n = m
但我相信有更多的pythonic方式可以完成任务。
答案 5 :(得分:4)
你可以像下面这样更容易,将你的列表分成子列表,这似乎更像Pythonic。然后打印它你想要的。 也不要使用列表,因为它是关键字(不推荐)
sub_list1=[list1[x:x+5] for x in xrange(0, len(list1), 5)]
for each in sub_list1:
print( ''.join(each))
答案 6 :(得分:3)
start = 0
for item in list:
if start < 4:
thefile.write("%s" % item)
start = start + 1
else: #once the program wrote 4 items, write the 5th item and two linebreaks
thefile.write("%s\n\n" % item)
start = 0
答案 7 :(得分:2)
只是为了证明我真的是一个未经改造的JAPH正则表达式是要走的路!
import re
q="".join(lst)
for x in re.finditer('.{,5}',q)
print x.group()
答案 8 :(得分:1)
如果您正在处理一个可能太大而无法容纳在RAM中的可迭代(如文件),您可以使用以下内容:
from itertools import izip_longest
def chunker(iterable, n, fillvalue=None):
"""Like an itertools.grouper but None values are excluded.
>>> list(chunker([1, 2, 3, 4, 5], 3))
[[1, 2, 3], [4, 5]]
"""
if n < 1:
raise ValueError("can't chunk by n=%d" % n)
args = [iter(iterable)] * n
return (
[e for e in t if e is not None]
for t in izip_longest(*args, fillvalue=fillvalue)
)
with open('some_file') as f:
for row in chunker(f, 5):
print "".join(row)
如果不考虑RAM,answer by ZdaR更可取,因为速度要快得多。
答案 9 :(得分:1)
我认为最简洁的书写方式是
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='')
答案 10 :(得分:0)
Python 3+简单方法
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')