如何创建内置函数count,而不使用它。python

如何创建内置函数count,而不使用它。python,python,function,count,built-in,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 把它全部清除掉 编写一个函数直方图,将字符

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

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
把它全部清除掉

编写一个函数直方图,将字符串作为参数 返回包含字符数直方图的列表

应该实现一个函数histprint,它将列表作为 函数直方图已返回并在屏幕上写入一个表,其中包含字符串中的所有字符。结果应该如下所示:

>>> h=histogram('Mississippi') 
>>> histprint(h) 
M: 1 
i: 4 
p: 2 
s: 4
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")
没有内置的功能

计数和计数器是可行的方法,但下面的方法也可以

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}

你可以通过创建一个字母字典,并计算单词中字母的频率来做到这一点

首先,创建一个字母字典,初始化为零。 注意:检查注释

Output: 
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。 输出:

因此,您的功能将是:

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指的是同一个字符,而不是大写的“M”或小写的“M”

您的算法如下所示:

>>> h=histogram('Mississippi') 
>>> histprint(h) 
M: 1 
i: 4 
p: 2 
s: 4
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")

如果您希望避免任何内置函数以及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]
这个答案与上面的答案没有什么不同,只是用try``except删除get


它也不是一个内置函数,而是一个数据类型,特别适用于AFAIK这种用途

你研究过了吗?是的,但它们只解释了内置函数计数。我想要相同的结果,但没有计数。这是一种方法,但我想更简单。而且根本没有内置的功能;哦甚至都没得到,嗯?但是len range chr ord也内置了函数:PExactly!只有我说的那些:len range chr ord不太熟悉try and except:/@sagarchalise你能解释为什么这里需要try and except吗?在上面的代码中?我感觉这不符合OP的要求,但我要指出,d=dictzipstring.ascii_字母,[0]*52-可以写成d=dict.fromKeyString.ascii_字母,0Tanks!看起来不错,但我如何将其放入函数中,以便我可以输入任何单词,而不仅仅是使用密西西比?@PatrikFernberg根据需要制作了一个函数。是的,我也想实现排序。排序是一件小事。我想你能应付。为您的案例选择插入排序。这是最好的小套。
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)
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]
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)