我用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']
有人可以幫我解決這個問題?
我用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']
有人可以幫我解決這個問題?
您可以簡單地使用內置的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 == 1
和False == 0
:)
如果你想只使用理解,
return sum([e == char for e in input_string])
的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
要手動爲寫一個計數器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
謝謝。但我必須使用列表理解來編寫代碼。 – Rachel
@Rachel請檢查我的更新回答:) – thefourtheye
__sum(e == s中的e爲字符)__也會起作用 – volcano