2012-10-04 71 views
2

我有一個字符串s,我需要從字符串中生成一組後綴。例如,abcdef將導致數組[f, ef, def, cdef, bcdef, abcdef]。我正在以直截了當的方式做到這一點:Python中的快速後綴生成

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長)

+0

爲什麼不使用「緩衝區」或「memoryview」而不是所有的切片? –

+0

你將如何處理結果集? – bohney

回答

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'] 
3

如何​​? (不知道你爲什麼使用一個集合,因爲後綴必須是不同的,但是我保持在這裏使用集合,因爲你說這就是你想要的。你也可以使用列表理解,如果你只是想要一個列表。)

+0

在最近版本的Python(2.7+)中存在集合解析:''{s [a:]爲範圍(len(s))}''。同樣值得注意的是,集合不會維持秩序。 –

+0

你爲什麼要使用一套?因爲它們都是不同的長度,它們自動地不同? –

+0

@JoranBeasley:這是真的,但我只是使用集合,因爲OP說這就是他想要的。例如,他可能想在以後與其他東西相交。 – BrenBarn