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が示唆しているように、(nの)チャンクでイテレーターを反復する方法があれば、これは簡単です。そして、その質問を読んだら、それを行う方法があります。

したがって、itertoolsレシピ(または他の質問からあなたが好む他のもの)grouperからの実装を考えると:

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

または、それらを印刷したいだけの場合:

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

それが存在することを知ったらgrouper、これはJoelCornettの答えよりも簡単だと思います。彼は最初のバージョンでは機能せず、修正する必要があったことに注意してください。これは間違いを犯すことはほとんど不可能です。通常、フェンスポストエラーの可能性を排除するものはすべて優れています。そのため、Cスタイルのループの代わりにforループinなどがあります。enumeratefor

ここでそれが実行されています:

>>> 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 に答える