2010-10-20 27 views
0

如何知道多少倍串組S,T和N出現在每個下面的話,有一個像這樣的輸出:不同的字母在不同的字詞中出現多少次?

  • 描述:第2,T 1,N + 1
  • 聲明S 2 ,t 3,n 1

單詞不是事先知道的。我腦海中想到的第一件事是製作字典,但對於字典我們只能有兩個未知數,所以任何提示如何接近它? 在此先感謝。

+0

您正在使用哪個版本的Python? – kennytm 2010-10-20 09:30:18

+1

請用[家庭作業]標記標記作業。 – 2010-10-20 10:50:46

+0

Python版本2.6.5 – Adia 2010-10-20 11:16:32

回答

1
from collections import defaultdict 
def counter(STRING): 
    h=defaultdict(int) 
    for i in STRING: 
    if i in "stn": 
     h[i]+=1 
    return h 
for s in ['description','statements']: 
    k=counter(s) 
    print k + " for " + s 
+0

但是,如何指定例如計數s 2,t 1,n 1是屬於「描述」還是屬於「語句」? – Adia 2010-10-21 11:17:47

+0

請參閱編輯。你可以自己想出來。 – ghostdog74 2010-10-21 11:21:50

+0

謝謝。打印應該是這樣的:print k,「for」,s,否則會給出錯誤:不支持的操作數類型爲+: – Adia 2010-10-21 12:02:33

0

幼稚的做法:

d = {} 
for c in s: 
    d[c] = s.count(c) 
+0

這會多次調用'.count'。你的意思是'd [c] + = 1'? – kennytm 2010-10-20 09:32:02

+0

@KennyTM:這將是非天真解決方案的一部分。 – 2010-10-20 09:32:42

+0

我想'集合中的c&set(「stn」):'也是非天真的。 – intuited 2010-10-20 10:35:37

2

在Python≥2.7和≥3.1you could use collections.Counter

>>> from collections import Counter 
>>> Counter("descriptions") 
Counter({'i': 2, 's': 2, 'c': 1, 'e': 1, 'd': 1, 'o': 1, 'n': 1, 'p': 1, 'r': 1, 't': 1}) 

(對於Python≥2.5存在http://code.activestate.com/recipes/576611/的實現。)

反類有一般詞典的界面,讓您可以使用x['n']得到計數。

>>> print("%s %s, %s %s, %s %s" % ('s', _['s'], 't', _['t'], 'n', _['n'])) 
s 2, t 1, n 1 
相關問題