基本上,我有一个很长的字符串,我想做一些像:
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}。
答案 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']