2016-05-15 141 views
0

例如,假设我们有一个字符串:如何分割的python字符串中的每个第n-1 + n个字符

'abcdefg' 

,我们需要得到像这样的列表:

['ab', 'bc', 'cd', 'de', 'ef', 'fg'] 

我们应该无法用任何一种库

这里是我的解决方案:

def str_split(s): 
    s = iter(s) 
    ch1='' 
    ch2='' 
    chars_list=[] 
    while True: 
     try: 
      ch1 = ch2 or next(s) 
      ch2 = next(s) 
      chars_list.append(ch1 + ch2) 
     except: 
      break 
    return chars_list 

我不知道有更好的解决方案吗?也许有可能使用列表理解,如here

+1

@ErikR对我来说,这些块在这里是重叠的... – schwobaseggl

回答

4

您可以简单地使用zip()list comprehension

chars_list = [ch1 + ch2 for ch1, ch2 in zip(s, s[1:])] 

更多一般来说,如果您需要任何解决方案n

n = 3 
chars_list = [s[i:i+n] for i in range(0, len(s) - n + 1, n - 1)] 
# ['abc', 'cde', 'efg'] 
+0

zip运作良好。这是一个非常优雅和强大的解决方案。谢谢! –

0

你可以试试这个(哈克)解决方案:

def str_split(s): 
    return [s[start:end] for start, end in enumerate(range(2, len(s)+1))] 

Delgan的压缩和解解决方案似乎更优雅,虽然:)

相关问题