【问题标题】:Count how many times each letter appears in a text sample计算每个字母在文本样本中出现的次数
【发布时间】:2016-05-22 20:12:50
【问题描述】:

我需要一个函数来计算每个字母在字符串中出现的次数。它必须将大写和小写视为同一个字母。我有点做到了,但它并不完全漂亮。

def lmao(x):

    aye=x.count("a")
    Aye=x.count("A")
    bye=x.count("b")
    Bye=x.count("B")
    cye=x.count("c")
    Cye=x.count("C")
    dye=x.count("d")
    Dye=x.count("D")
    Eye=x.count("E")
    eye=x.count("e")
    Fye=x.count("F")
    fye=x.count("f")
    Gye=x.count("G")
    gye=x.count("g")
    Hye=x.count("H")
    hye=x.count("h")
    Iye=x.count("I")
    iye=x.count("i")
    Jye=x.count("J")
    jye=x.count("j")
    Kye=x.count("K")
    kye=x.count("k")
    Lye=x.count("L")
    lye=x.count("l")
    Mye=x.count("M")
    mye=x.count("m")
    Nye=x.count("N")
    nye=x.count("n")
    Oye=x.count("O")
    oye=x.count("o")
    Pye=x.count("P")
    pye=x.count("P")
    Qye=x.count("Q")
    qye=x.count("q")
    rye=x.count("r")
    Rye=x.count("R")
    sye=x.count("s")
    Sye=x.count("S")
    tye=x.count("t")
    Tye=x.count("T")
    uye=x.count("u")
    Uye=x.count("U")
    Vye=x.count("V")
    vye=x.count("v")
    Wye=x.count("W")
    wye=x.count("w")
    Xye=x.count("X")
    xye=x.count("x")
    Yye=x.count("Y")
    yye=x.count("y")
    Zye=x.count("Z")
    zye=x.count("z")
    killme=(aye+Aye,bye+Bye,cye+Cye,Dye+dye,Eye+eye,Fye+fye,Gye+gye,Hye+hye,Iye+iye,jye+Jye,Kye+kye,Lye+lye,Mye+mye,Nye+nye,Oye+oye,Pye+pye,Qye+qye,rye+Rye,sye+Sye,Tye+tye,uye+Uye,Vye+vye,Wye+wye,xye+Xye,Yye+yye,Zye+zye)
    return killme

所以是的,这就是我想出的灾难。有什么办法可以缩短这个过程?

【问题讨论】:

标签: python python-2.7 python-2.x


【解决方案1】:

使用collections.Counterhttps://docs.python.org/2/library/collections.html#counter-objects

from collections import Counter    
counter = Counter(mystr.lower())

会给你每个字母的所有出现,忽略大小写

【讨论】:

  • 我想他也想要不在字符串中的字母数。
  • @VincentSavard 没问题,计数器在没有找到键时默认返回0。
  • @timgeb:我的意思是在返回元组中。
  • @VincentSavard:是的。根据stackoverflow.com/questions/7001144/…,可以使用 ord() 和 range() 生成所有字母。 OP 可以使用它来查看计数器中没有的内容
  • @TomNash:OP 说“它必须将大写和小写视为同一个字母”
【解决方案2】:

这可能会有所帮助:

def counter(text):
    count_list = []
    for char in "abcdefghijklmnopqrstuvwxyz":
        count_list.append(text.lower().count(char))
    return tuple(count_list)

print(counter("Helllo123"))

输出:

(0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

【讨论】:

    【解决方案3】:

    准确返回您的要求:

    import string
    def lmao(x):
        return tuple(x.lower().count(c) for c in string.lowercase)
    

    【讨论】:

      【解决方案4】:

      使用 counter 和字典理解来获取每个字母的计数。

      import string
      from collections import Counter
      

      对于一个 alpha 排序的元组,

      def count_letter_tuples(sentence):
          return tuple(Counter(sentence.lower()).get(c, 0) for c in string.ascii_lowercase)
      
      >>> count_letter_tuples("Some Big Sentence")
      (0, 0, 1, 0, 4, 0, 1, 0, 1, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0)
      

      或者对于字典响应:

      def count_letters(sentence):
          return {c: Counter(sentence.lower()).get(c, 0) for c in string.ascii_lowercase}
      
      >>> count_letters("Some Big Sentence")
      {'a': 0,
       'b': 1,
       'c': 1,
       'd': 0,
       'e': 4,
       'f': 0,
       'g': 1,
       'h': 0,
       'i': 1,
       'j': 0,
       'k': 0,
       'l': 0,
       'm': 1,
       'n': 2,
       'o': 1,
       'p': 0,
       'q': 0,
       'r': 0,
       's': 2,
       't': 1,
       'u': 0,
       'v': 0,
       'w': 0,
       'x': 0,
       'y': 0,
       'z': 0}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-07-23
        • 2016-01-23
        • 1970-01-01
        • 2018-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多