簡體   English   中英

如何優化這個 for 循環?

[英]How can I optimize this for-loop?

我需要檢查大小為n的字符串s中出現的字母"a"

例子:

s = "abcac"
n = 10

用於檢查字母"a"出現的字符串: "abcacabcac"

出現次數: 4

我的代碼有效,但我需要它更快地處理較大的n值。
我能做些什么來優化這段代碼?

def repeatedString(s, n):
    a_count, word_iter = 0, 0
    for i in range(n):
        if s[word_iter] == "a":
             a_count+=1

        word_iter += 1

        if word_iter == (len(s)):
            word_iter = 0

    return a_count

您只需要組裝完整的重復字符串即可。 計算整個字符串中指定字符的數量,並將其乘以完全重復的次數( n//len(s)次)。 再加上重復結束時最后(截斷)部分中出現的次數(即前n%len(s)字符)

def countChar(s,n,c):
    return s.count(c)*n//len(s)+s[:n%len(s)].count(c)

output:

countChar("abcac",10,"a") # 4 times in 'abcacabcac'
countChar("abcac",17,"a") # 7 times in 'abcacabcacabcacab'

計算 a 在字符串中出現的次數,s 最長為 n

s = "abcac"
n = 10
str(s*(int(n/len(s))))[:n].count('a')

您可以使用正則表達式:

import re
a_count = len(re.findall(r'a',s))

re.findall返回一個包含所有匹配項的數組,我們可以得到它的長度。 使用正則表達式允許更大的泛化和搜索更復雜模式的能力。 Debra 的原始答案更適合簡單的字符串搜索:

a_count = s.count('a')

暫無
暫無

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

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