0

可能重复:
在 Python 中按块(n)迭代迭代器?

假设我有一个 492 个字符的字符串存储在一个变量中。我如何打印出前 50 个字符,然后转到下一行,然后打印出下一个 50,最后打印一行 42 个字符?

4

4 回答 4

6
chars_per_line = 50
for i in range(0, len(s), chars_per_line):
    print s[i:i+chars_per_line]
于 2013-01-16T01:03:52.873 回答
2
for line in mystring.splitlines():
    print line[:50]
于 2013-01-16T01:05:45.337 回答
0
In [363]: mystr = "A"*492

In [364]: print '\n'.join(mystr[i*width:(i+1)*width] for i in range(int(math.ceil(float(len(mystr))/width))))
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
于 2013-01-16T01:16:16.423 回答
0

正如@Martijn Pieters 暗示的那样,如果您有办法通过 chunks (of n) 迭代迭代器,这将非常容易。如果你读到这个问题,你确实有办法做到这一点。

因此,鉴于itertools 食谱grouper的实现(或您从其他问题中喜欢的任何其他内容):

lines = [''.join(group) for group in grouper(50, my_string, '')]

或者,如果您只想打印它们:

for group in grouper(50, my_string, ''):
    print ''.join(group)

一旦你知道它的grouper存在,我认为这比 Joel Cornett 的答案更简单。请注意,他在第一个版本中不起作用,必须修复;这几乎是不可能出错的。任何消除栅栏错误可能性的方法通常都更好;这就是为什么我们有for-in循环而enumerate不是 C 风格的for循环,等等。

这是在行动:

>>> my_string='1234567890'*49+'12'
>>> print my_string
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012
>>> # That was ugly…
>>> for group in grouper(50, my_string, ''):
...     print ''.join(group)
12345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890
123456789012345678901234567890123456789012
>>> # Pretty!
于 2013-01-16T02:46:35.067 回答