如何在字符串中打印每个k字母块直到字符串结尾?

时间:2015-01-27 22:30:33

标签: python

基本上,我有一个很长的字符串,我想做一些像:

for x in range(3,10):
   #when x = 3, break the string in blocks of 3, when x = 4, break it into blocks of 4, etc.

因此,例如,如果字符串等于“hello_world”且x = 5,那么我想返回{hello,_worl,d}。

4 个答案:

答案 0 :(得分:2)

在Python中执行此操作的规范方法来自itertools recipes页面

from itertools import zip_longest

def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return zip_longest(*args, fillvalue=fillvalue)

result = [''.join(group) for group in grouper('hello_world', 5, fillvalue="")]

结果:

Out[4]: ['hello', '_worl', 'd']

答案 1 :(得分:1)

这应该可以解决问题,它依赖于python优雅地切片比请求更短的数组(即"this_string"[2:400]将返回"is_string"而没有错误)。

string = "hello_world"
for x in range(3, 10):
    split = [string[(i*x):(i+1)*x] for i in range(1 + len(string) / x)]
    print(split)

答案 2 :(得分:0)

这样的事情应该有效。我们依赖于while循环最后一次运行的事实,即使只剩下一个字符(如"d"),并且我们可以采用比实际字符串更长的切片,它只会返回剩下的东西。

in_string = "hello_world"
sep = 5

chunks = []
i = 0
while (sep * len(chunks) < len(in_string)):
    chunks.append(in_string[sep*i:sep*(i+1)])
    i += 1

print chunks

答案 3 :(得分:0)

这是一个漂亮的小递归函数:

def splitter(word, n):
    if len(word) > n:
        return [word[:n]] + splitter(word[n:],n)
    else:
        return [word]

>>> splitter("hello_world", 5)
['hello', '_worl', 'd']