繁体   English   中英

字符串上的字母计数

[英]Letter Count on a string

Python新手在这里。 我正在尝试计算给定字符串中字母“a”的数量。 代码如下。 它在字符串“banana”中不断返回 1 而不是 3。 任何输入表示赞赏。

def count_letters(word, char):
    count = 0
    while count <= len(word):
        for char in word:
            if char == word[count]:
                count += 1
            return count



print count_letters('banana','a')

其他答案显示了您的代码有什么问题。 但是,如果您不只是为了练习而这样做,那么还有一种内置的方法可以做到这一点:

>>> 'banana'.count('a')
3

丹本给出了这个修正版:

def count_letters(word, char):
  count = 0
  for c in word:
    if char == c:
      count += 1
  return count

这里有一些其他方法可以做到这一点,希望它们能教你更多关于 Python 的知识!

类似,但更短的for循环。 利用布尔值可以在为真时变为 1,为假时变为 0 的事实:

def count_letters(word, char):
  count = 0
  for c in word:
    count += (char == c)
  return count

短 for 循环通常可以变成列表/生成器推导式。 这将创建与每个字母对应的整数列表,如果字母不匹配char则为 0,如果匹配则为 1,然后将它们相加:

def count_letters(word, char):
  return sum(char == c for c in word)

下一个过滤掉所有与char不匹配的char ,并计算剩余的数量:

def count_letters(word, char):
  return len([c for c in word if c == char])

一个问题是您使用count来指代您正在检查的单词中的位置和您看到的char数,并且您使用char来指代您正在检查的输入字符和当前字符串中的字符。 请改用单独的变量。

另外,将return语句移到循环外; 否则您将始终在检查第一个字符后返回。

最后,您只需要一个循环来遍历字符串。 摆脱外部while循环,您将不需要跟踪字符串中的位置。

根据这些建议,您的代码将如下所示:

def count_letters(word, char):
  count = 0
  for c in word:
    if char == c:
      count += 1
  return count

一个简单的方法如下:

def count_letters(word, char):
    return word.count(char)

或者,还有另一种方法直接计算每个元素:

from collections import Counter
Counter('banana')

当然,您可以指定一个元素,例如

Counter('banana')['a']

你的return在你的 for 循环中! 小心缩进,您希望行return count在循环之外。 因为 for 循环遍历word所有字符,所以完全不需要外部 while 循环。

一个清理版本:

def count_letters(word, to_find):
    count = 0
    for char in word:
        if char == to_find:
            count += 1
    return count

你有很多问题:

  • 正如其他人已经指出的那样,您的缩进有问题。
  • 不需要嵌套循环。 只需一个循环就足够了。
  • 您使用 char 表示两种不同的含义,但 for 循环中的 char 变量将覆盖参数中的数据。

此代码修复了所有这些错误:

def count_letters(word, char):
    count = 0
    for c in word:
        if char == c:
            count += 1
    return count

一种更简洁的写法是使用生成器表达式:

def count_letters(word, char):
    return sum(char == c for c in word)

或者只是使用为您执行此操作的内置方法count

print 'abcbac'.count('c')

我看到了一些错误。

  1. 您重复使用标识符char ,因此会导致问题。
  2. 你是说if char == word[count]而不是word[some index]
  3. 您在 for 循环的第一次迭代后返回!

你甚至不需要while 如果您将 char 参数重命名为search

for char in word:
    if char == search:
        count += 1
return count

或者您可以使用:

mystring = 'banana'
number = mystring.count('a')
count_letters=""

number=count_letters.count("")

print number

"banana".count("ana")返回 1 而不是 2 !

我认为该方法以等于子字符串长度的步长迭代字符串(或列表),因此它看不到这种东西。

因此,如果您想要“完整计数”,则必须使用步骤 1 的正确循环来实现自己的计数器

如果我错了纠正我...

def count_letter(word, char):
    count = 0
    for char in word:
        if char == word:
            count += 1
    return count        #Your return is inside your for loop
r = count_word("banana", "a")
print r

3

x=str(input("insert string"))
c=0
for i in x:
   if 'a' in i:
      c=c+1
print(c)        

以下程序将一个字符串作为输入并输出一个表示字母数的pandas DataFrame。


样本输入
你好
样本输出
字符频率
0 小时 1
1 e 1
2 升 2
3 到 1

import pandas as pd

def count_letters(word, char):
    return word.count(char)

text = input()
text_split = text.split()
list1 = []
list2 = []
for i in text_split:
    for j in i:
        counter = count_letters (text, j)
        list1.append(j)
        list2.append(counter)
dictn = dict(zip(list1, list2))
df = pd.DataFrame (dictn.items(), columns = ['char', 'freq.'])
print (df)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM