2010-10-20 29 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 
相关问题