【问题标题】:counting letters (only letters) in a long string (python 2.72)计算长字符串中的字母(仅字母)(python 2.72)
【发布时间】:2012-01-11 03:42:25
【问题描述】:

我需要编写一个函数来接收一个长字符串,然后放入字典中 每个字母,就是它在字符串中的出现频率。 我写了下一个函数,但问题是它没有忽略空格、数字等。 我被要求使用函数symbol in string.ascii_lowercase,但我不知道该怎么做。 这是我的代码:

def calc_freq(txt):
   dic={}
   for letter in range(len(txt)):
           if dic.has_key(txt[letter])==True:
                dic[txt[letter]] += 1
           else:
            dic[txt[letter]] = 1
   return dic

感谢您的帮助。

【问题讨论】:

    标签: string count letters


    【解决方案1】:
    import string
    
    s = 'oasndoasndoansdakls'
    count = []
    dictionary = {}
    
    for x in set(s):
         if x in string.ascii_lowercase:
              dictionary[x] = s.count(x)
    
    print (dictionary)
    

    这将创建一个包含字符及其计数的字典,并且仅当它们在 string.ascii_lowercase 列表中时才包含它们。


    以下是如何在您的代码中使用它:

    import string
    
    def calc_freq(txt):
         dic={}
         for letter in txt:
              if letter in string.ascii_lowercase:
                   if letter in dic:
                        dic[letter] += 1
                   else:
                        dic[letter] = 1
         return dic
    

    您只需要在将字母添加到字典或增加其计数之前添加一个 if 语句。

    我还去掉了letter in range(txt)txt[letter],你可以直接在python中访问每个字符,因为字符串是iterable,可以像列表一样对待。

    【讨论】:

    • @Orr 补充说,我让你更容易阅读,但如果你想要你的原始代码,只需替换我更改的内容。
    • 错误是什么?你在通过什么?它在我的测试中运行良好,我可以举一个输入示例吗?
    • 回溯(最近一次调用最后):文件“”,第 1 行,在 calc_freq('zoobi') 文件“”,第 4 行,如果 string.ascii_lowercase 中的字母在 calc_freq 中:NameError: global name 'string' is not defined
    • 你需要将import string添加到你的python文件的顶部才能访问lower_case列表。
    【解决方案2】:

    只是为了好玩:

    s = 'Type "help", "copyright", "credits" or "license" for more information.'
    print dict(filter(lambda i: str.isalnum(i[0]), set(zip(a,map(a.count,a)))))
    

    {'a': 1, 'c': 3, 'e': 6, 'd': 1, 'g': 1, 'f': 2, 'i': 5, 'h': 2、'm': 2,'l':2,'o':6,'n':3,'p':3,'s':2,'r':6,'t':3,'y':2, “T”:1}

    【讨论】:

      猜你喜欢
      • 2014-07-17
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 2015-12-01
      • 2016-01-01
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多