簡體   English   中英

在 python 中查找一個非常大的字符串的所有子字符串

[英]finding all substrings of a very large string in python

我正在嘗試查找字符串的所有 substring。 它適用於長度較小的字符串,但是當字符串長度增加(例如 5000)時,它會給出 memory 錯誤。 有沒有辦法找到長字符串的 substring ?

S="sample string"
all=[]

for i in range(0,len(S)):
    for j in range(0,len(S)):
        if len(S[i:j])>0 and S[i:j] not in all:
            all.append(S[i:j])
        if len(S[-i:])>0 and S[-i:] not in all:
            all.append(S[-i:])
from itertools import combinations
    
S = "sample string"  
print([''.join(l) for i in range(len(S)) for l in combinations(S, i+1)])

如果您可以適應重復,您可以使用生成器:

s="sample string"
sub_strings_dups_inc=(s[i: j] for i in range(len(s)) for j in range(i + 1, len(s) + 1))

這將一次生成每個子字符串(如果字符串長度為 0,則無需進行更復雜的過濾等)

如果您需要過濾掉所有重復項,則需要在字符串末尾的 memory 中設置整個組合,並且會受到限制。 你可以這樣做:

def sub_strings(s):
    seen=set()
    for i in range(len(s)):
        for j in range(i+1, len(s)+1):
            ss=s[i:j]
            if ss not in seen:
                seen.add(ss)
                yield ss 

(順便說一句:不要習慣使用all作為變量。您將用相同的名稱覆蓋內置的 function...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM