![](/img/trans.png)
[英]Python efficient way to check if very large string contains a substring
[英]Best way to check if a string contains consecutive substring?
我試圖找到檢查字符串是否連續出現特定 substring 的最佳方法。 返回一個 boolean 值,例如,僅當整個字符串在字符串內與其自身相鄰時才返回 True。 一些示例測試用例:
consecutive_checker(string='blaablaa', substring = 'a')
>>> True
consecutive_checker(string='blaablaa', substring = 'aa')
>>> False
consecutive_checker(string='blaablaa', substring = 'blaa')
>>> True
consecutive_checker(string='blaablaa', substring = 'baa')
>>> False
def consecutive_checker(string='blaablaa', substr = 'blaa'):
count = string.count(substr)
if count > 1:
for sidx in range(len(string) - len(substr)+1):
for ssidx in range(len(substr)+1):
if string[sidx:sidx+ssidx] == string[sidx+ssidx:sidx+ssidx*2] == substr:
return True
return False
這里是為了提高效率(如果不是很明顯):
所以我在想如何進一步改進它。 似乎內置count()
function 雖然非常有效地迭代整個字符串。 這可能是一個改進點,但我不能完全避免這種情況,因為我將它用作我的安全網,只在需要時進行迭代。 同樣,三個丑陋的檢查和雙重 for 循環不會散發出一種效率氛圍。 那么我怎樣才能更好地改進它呢? 歡迎任何建議!
你真的把這件事復雜化了。 只需將 substring 加倍並檢查它是否出現在字符串中。
def consecutive_checker(string, substr):
return substr*2 in string
另一種方法是使用.find()
function 返回傳遞的參數(子字符串)的第一個索引。 對於沒有找到它的情況,它將返回-1
。
>>> string = 'blaablaa'
>>> string.find('aa'*2)
-1
>>> string.find('blaa'*2)
0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.