2014-01-16 58 views
1

我用Python寫一個代碼來計算的次數使用列表理解計數字母表一次出現在列表中

例如發生在特定序列的字母:

countoccur("s", "ssssdfrtsgjdt") 

應該給5作爲s發生5次以上的輸出。我寫了這個代碼,並得到下面的輸出:

def countoccur(x,s): 
    y=[e for e in s if e==x] 
    return y 

輸出:

['s', 's', 's', 's', 's'] 

有人可以幫我解決這個問題?

回答

2

您可以簡單地使用內置的str.count功能,這樣

def countoccur(char, input_string): 
    return input_string.count(char) 

print countoccur("s", "ssssdfrtsgjdt") 

我會用發電機表達和sum功能這樣

return sum(1 for e in input_string if e == char) 

這意味着可以縮短到下面,如@volcano在評論中建議

return sum(e == char for e in input_string) 

這樣做是因爲,在Python,True == 1False == 0 :)

如果你想只使用理解,

return sum([e == char for e in input_string]) 
+0

謝謝。但我必須使用列表理解來編寫代碼。 – Rachel

+0

@Rachel請檢查我的更新回答:) – thefourtheye

+0

__sum(e == s中的e爲字符)__也會起作用 – volcano

3

Python有更好的工具,但如果你想保持你的代碼,只是返回的LEN y

def countoccur(x,s): 
    y=[e for e in s if e==x] 
    return len(y) 

Outout:

output: 5 

您還可以使用count()

print string.count('s') 

findall()

print len(re.findall("s", string)) 
2

的Python真正與所有包含電池,嘗試使用collections.Counter

In [1]: from collections import Counter 

In [2]: s="ssssdfrtsgjdt" 

In [3]: Counter(s) 
Out[3]: Counter({'s': 5, 'd': 2, 't': 2, 'g': 1, 'f': 1, 'j': 1, 'r': 1}) 

In [4]: Counter(s)['s'] 
Out[4]: 5 
0

要手動爲寫一個計數器Fredrik Pihl提到:

In [60]: from collections import defaultdict 
    ...: cnt=defaultdict(int) 
    ...: s="ssssdfrtsgjdt" 
    ...: for v in s: 
    ...: cnt[v]+=1 
    ...: 

In [61]: print cnt['s'], cnt['d'] 
5 2 
相關問題