如何创建内置函数计数,而不使用它。蟒蛇

时间:2014-10-30 07:04:09

标签: python function count built-in

我想得到与此代码完全相同的结果:

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

没有内置功能!

4 个答案:

答案 0 :(得分:1)

countCounter是可行的方法,但以下情况也应该正常。

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")

如果您正在计算字符,并且您不区分大写和小写(即:您认为Mm指的是相同的字符,而不是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)