[英]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.