【问题标题】:Inputing a sentence and counting each individual letter?输入一个句子并计算每个字母?
【发布时间】:2013-12-05 18:25:09
【问题描述】:

所以基本上我需要程序来计算每个字母在一个句子中使用了多少次。 我唯一发现的就是这个,而且很丑:

from collections import Counter
str = "Mary had a little lamb"
counter = Counter(str)
print counter['a']
print counter['b']
print counter['c']
print counter['d']
print counter['e']
print counter['f']
#etc to z

有更简单的方法吗????

【问题讨论】:

  • 您提到的代码实际上比您在大多数其他语言中获得的代码更简单(感谢有用的collections 模块)。除非您想知道如何编写 for 循环...是这样吗?
  • 看看this answer。您需要自己编写计数代码,但这可以帮助您入门。
  • 不确定你认为哪个方面丑。计数操作只有两行(导入 Counter 类,然后创建 Creater 实例)。是你觉得丑陋的print 语句的继承吗?当然,一旦获得信息,就有一百万种不同的方式来使用/呈现信息。

标签: python python-2.7


【解决方案1】:

假设我理解你:

>>> from collections import Counter
>>> from string import ascii_lowercase
>>> s = "Mary had a little lamb"
>>> counts = Counter(s.lower())
>>> for letter in ascii_lowercase:
...     print letter, counts[letter]
...     
a 4
b 1
c 0
[...]
x 0
y 1
z 0

请注意,我将字符串小写,以便 m 给出 2;如果您不想这样做,请删除 .lower() 并改用 string.ascii_letters

【讨论】:

  • +1 教我counts["non-existing key"] 返回0。我以前不知道这一点,并且会期待KeyError
  • @TimPietzcker: 是的,尽管Counter 不是defaultdict 的子类,但在这方面它的行为就像一个子类。
【解决方案2】:

您只需遍历所有小写字母,并打印出每个小写字母的计数:

>>> from collections import Counter
>>> sentence = "Mary had a little lamb"
>>> counter = Counter(sentence)
>>> from string import ascii_lowercase
>>> for letter in ascii_lowercase:
...     print '{} = {}'.format(letter, counter[letter])
a = 4
b = 1
c = 0
d = 1
e = 1
f = 0
g = 0
h = 1
i = 1
j = 0
k = 0
l = 3
m = 1
n = 0
o = 0
p = 0
q = 0
r = 1
s = 0
t = 2
u = 0
v = 0
w = 0
x = 0
y = 1
z = 0

【讨论】:

    【解决方案3】:

    如果你只想打印字符串中实际存在的字符的信息,一个简单的方法就是这样做

    for key in sorted(counter.keys()):
        print("{0} appears {1} times.".format(key, counter[key]))
    

    结果:

      appears 4 times.
    M appears 1 times.
    a appears 4 times.
    b appears 1 times.
    d appears 1 times.
    e appears 1 times.
    h appears 1 times.
    i appears 1 times.
    l appears 3 times.
    m appears 1 times.
    r appears 1 times.
    t appears 2 times.
    y appears 1 times.
    

    请注意,空格字符也被计算在内。

    【讨论】:

      【解决方案4】:
      from collections import Counter
      str = "Mary had a little lamb"
      counter = Counter(str)
      for c in set(str):
          print '%s -> %d' % (c, counter[c])
      

      【讨论】:

      • 您使用空格而不是反引号来编码块。
      【解决方案5】:
      import string
      from collections import Counter
      str = "Mary had a little lamb"
      counter = Counter(str)
      for letter in string.lowercase:
          print counter[letter]
      

      【讨论】:

        【解决方案6】:

        请参阅this answer,它将为您提供如何创建一系列字符的示例。然后只需使用 foreach 循环:

        for item in letters_a_to_z:
            print counter[item]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-05-18
          • 2019-10-05
          • 1970-01-01
          • 2022-10-26
          • 2017-07-22
          • 1970-01-01
          • 2015-10-08
          相关资源
          最近更新 更多