【发布时间】:2012-12-30 06:20:59
【问题描述】:
假设我有一个 492 个字符的字符串存储在一个变量中。我怎样才能打印出前 50 个字符,然后转到下一行,然后打印出接下来的 50 个字符,最后打印出一行 42 个字符?
【问题讨论】:
-
你尝试过什么吗?
-
@MartijnPieters:我不认为这是重复的。但我和你一样,可能会使用那个来解决这个问题。
假设我有一个 492 个字符的字符串存储在一个变量中。我怎样才能打印出前 50 个字符,然后转到下一行,然后打印出接下来的 50 个字符,最后打印出一行 42 个字符?
【问题讨论】:
chars_per_line = 50
for i in range(0, len(s), chars_per_line):
print s[i:i+chars_per_line]
【讨论】:
i+chars_per_line而不是i+50吗?
for line in mystring.splitlines():
print line[:50]
【讨论】:
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
【讨论】:
import this :-)
正如@Martijn Pieters 暗示的那样,如果您有办法访问iterate an iterator by chunks (of n),这将非常容易。如果您阅读了该问题,您确实有办法做到这一点。
因此,鉴于 itertools recipes 中的 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!
【讨论】: