2015-10-14 175 views
-3

一個=「人人生而憲法的權力下平等,托馬斯·傑斐遜」計數的字母總數字符串

我知道a.count(「A」)將返回多少「A」有。但我想要統計有多少A,E,C和T,並將它們加在一起。非常感謝。

進出口使用Python3

+0

你需要分別計算每個字母還是隻計算總數? – digitaLink

回答

5

查找到collections.Counter

>>> from collections import Counter 
>>> import string 
>>> c = Counter(l for l in a if l in string.ascii_letters) 
>>> c 
Counter({'e': 11, 't': 6, 'o': 6, 'r': 5, 'n': 5, 'a': 4, 'l': 3, 'f': 3, 
     's': 3, 'u': 3, 'h': 3, 'i': 2, 'd': 2, 'c': 2, 'm': 2, 'A': 1, 
     'p': 1, 'w': 1, 'T': 1, 'J': 1, 'q': 1}) 
>>> sum(c.values()) 
66 
>>> c = Counter(l for l in a if l in 'AecT') 
>>> c 
Counter({'e': 11, 'c': 2, 'A': 1, 'T': 1}) 
>>> sum(c.values()) 
15 
+0

你可以通過將'string.ascii_letters'存儲在一個集合 –

+0

'sum(c [x] for x in('A','e','c','T'))''中得到一些改進,因爲OP想要「來統計有多少A,E,C和T,並將它們加在一起」 –

+0

@JohnLaRooy確實,但樣本量太小 - 對於設置的裸露150μs,20μs太小。 – AChampion

2

Python有一個很好的模塊。使用計數器

from collections import Counter 
a = "All men are created equal under the power of the constitution, Thomas Jefferson" 
counter = Counter(a) 

print(counter) 

它會輸出一個所有字母的字典作爲關鍵字,值將是出現次數。

0

你可以使用正則表達式表達式來查找字母總數輕鬆

import re 
p = re.compile("\w") 
a = "All men are created equal under the power of the constitution, Thomas Jefferson" 
numberOfLetters = len(p.findall(a)) 

將返回66

如果你只是想A,E,C和T,你應該使用這個表達式代替:

p = re.compile("[A|e|c|T]") 

將返回15

0

只是用另一種方法嘗試

map(lambda x: [x, a.count(x)], 'AecT') 

'a'是輸入字符串。 'AecT'可以根據需要用所需的字母替換。

+1

重複''a''有點令人困惑,並且計數'a'會包括標點符號,所以改爲OP的請求(或者可以使用'string.ascii_letters'作爲字母) – AChampion