创建一个详尽的'n`子串列表

时间:2016-04-25 18:13:59

标签: python string split

我正在训练将一个字符串拆分为n个子字符串并返回它们的元组列表。

我现在使用代码 for (w1,w2) in [(w[:i],w[i:]) for i in range(len(w))]其中w是包含单词的变量。因此,如果w='house',则会返回[('','house'),('h','ouse')等等。

这适用于将字符串拆分为所有可能的字符串对,但现在我想进行其他字符串拆分(例如n=3),例如'ho','u','se'将单个字符串拆分为所有可能的字符串n子串的方式。我怎样才能有效地做到这一点?

1 个答案:

答案 0 :(得分:4)

以下是使用生成器递归执行此操作的一种方法:

def split_str(s, n):
  if n == 1:
     yield (s,)
  else:
    for i in range(len(s)):
      left, right = s[:i], s[i:]
      for substrings in split_str(right, n - 1):
        yield (left,) + substrings

for substrings in split_str('house', 3):
  print substrings

打印出来:

('', '', 'house')
('', 'h', 'ouse')
('', 'ho', 'use')
('', 'hou', 'se')
('', 'hous', 'e')
('h', '', 'ouse')
('h', 'o', 'use')
('h', 'ou', 'se')
('h', 'ous', 'e')
('ho', '', 'use')
('ho', 'u', 'se')
('ho', 'us', 'e')
('hou', '', 'se')
('hou', 's', 'e')
('hous', '', 'e')

如果您不想要空字符串,请将循环边界更改为

    for i in range(1, len(s) - n + 2):