我想得到与此代码完全相同的结果:
def histogram(s):
d = {}
for w in s:
d[w] = s.count(w)
for k in sorted(d):
print (k + ': ' + str(d[k]))
但不使用任何内置函数。我只想使用len()和range()以及chr()和ord()。
在密西西比州输入时,此程序的结果是:
M: 1
i: 4
p: 2
s: 4
要清除所有upp!
编写一个以字符串作为参数的函数直方图 返回一个包含字符数字的直方图的列表。
应该实现一个函数histprint,它将列表作为 函数直方图已返回并在屏幕上写入一个表,其中包含字符串中的所有字符。结果应如下所示:
>>> h=histogram('Mississippi')
>>> histprint(h)
M: 1
i: 4
p: 2
s: 4
没有内置功能!
答案 0 :(得分:1)
count
和Counter
是可行的方法,但以下情况也应该正常。
my = "stackoverflow"
d={}
for l in my:
d[l] = d.get(l,0) + 1
print d
{'a': 1, 'c': 1, 'e': 1, 'f': 1, 'k': 1, 'l': 1, 'o': 2, 's': 1, 'r': 1, 't': 1, 'w': 1, 'v': 1}
答案 1 :(得分:1)
如果你想避免任何内置函数以及诸如get之类的方法。您可以使用与{d-coder回答的内容相同的try
catch
。
基本上你可以这样做:
def histogram(word):
counter = {}
for char in word:
try:
counter[char] = counter[char] + 1
except KeyError:
counter[char] = 1
return counter
def histprint(h):
for k in h:
print k, h[k]
此答案与上述内容没有区别,只是get
删除了try``except
。
同样Counter不是内置函数,而是可用于特殊目的AFAIK的数据类型。
答案 2 :(得分:0)
您可以通过创建字母字典并计算单词中字母的频率来实现。
import string d= dict.fromkeys(string.ascii_letters, 0) #d= dict(zip(string.ascii_letters, [0]*52)) # string.ascii_letters: should give you a list of alphabets (UPPER case,lower case).
注意:检查评论
Output:
{'A': 0, 'C': 0, 'B': 0, 'E': 0, 'D': 0, 'G': 0, 'F': 0, 'I': 0, 'H': 0, 'K': 0, 'J': 0, 'M': 0, >'L': 0, 'O': 0, 'N': 0, 'Q': 0, 'P':
0,'S':0,'R':0,'U':0,'T':0,'W':0,'V':0,'Y':0,'X' :0, 'Z':0,'a':0,'c':0,'b':0,'e':0,'d':0,'g':0,'f':0,'i “: 0,'h':0,'k':0,'j':0,'m':0,'l':0,'o':0,'n':0,'q':0, 'p':0,'s':0,'r':0,'u':0,'t':0,'w':0,'v':0,'y':0,'x “: 0,'z':0}
+1
。 w= "Mississippi" for x in list(w): d[x]+=1 l= {} for (key, value) in d.iteritems(): if value>0: print key:value
输出:
M : 1 i : 4 p : 2 s : 4
所以你的功能是:
def histprint(w):
d= dict.fromkeys(string.ascii_letters, 0)
for x in list(w):
d[x]+=1
l= {}
for (key, value) in d.iteritems():
if value>0:
print key,':',value
histprint("Mississippi")
如果您正在计算字符,并且您不区分大写和小写(即:您认为M
和m
指的是相同的字符,而不是Upper'M'或更低'm')
您的算法如下所示:
import string
def histprint(w):
d= dict.fromkeys(string.ascii_lowercase, 0)
for x in list(w.lower()):
d[x]+=1
l= {}
for (key, value) in d.iteritems():
if value>0:
print key,':',value
histprint("Mississippi")
答案 3 :(得分:0)
def histogram(s):
d = {}
for i in s:
try:
d[i] += 1
except KeyError:
d[i] = 1
# Do you want to implement sorting also without inbuilt method ?
# Not added sorting here ! `sorted(d)` will give the sorted keys.
for k, v in d.iteritems():
print "{} : {}".format(k, v)