2

我有一个字符串 s,我需要从字符串生成一组后缀。例如,abcdef会导致数组[f, ef, def, cdef, bcdef, abcdef]。我以直接的方式这样做:

def get_suffixes(s):
    sb_set = set()
    sb = ''
    for i in range(len(s)-1,-1,-1):
        sb = s[i] + sb
        sb_set.add(sb)

有没有更优化/快速的方法来做到这一点?我需要生成大量这样的后缀(字符串 s 是 10K 长)

4

2 回答 2

3

怎么样set(s[a:] for a in xrange(len(s)))

(不确定为什么要使用集合,因为后缀必须是不同的,但我在这里保持使用集合,因为您说这就是您想要的。如果您只想要一个列表,您也可以只使用列表推导。 )

于 2012-10-04T18:53:01.580 回答
2

只需使用列表推导 .. 稍后在需要集合操作时转换为集合

s = "abcdef"    
suffixes = [s[i:] for i in range(1,len(s))]

>>> s = "abcdef"
>>> suffixes = [s[i:] for i in range(1,len(s))]
>>> suffixes
['bcdef', 'cdef', 'def', 'ef', 'f']

或者

>>> s = "abcdef"
>>> suffixes = [s[i:] for i in range(len(s))]
>>> suffixes
['abcdef','bcdef', 'cdef', 'def', 'ef', 'f']
于 2012-10-04T18:52:56.050 回答