Python 字符串上的字母计数
这里是Python新手。我试图数一数给定字符串中字母“a”的数量。代码如下。它在字符串“banana”中不断返回1而不是3。欢迎您的任何意见Python 字符串上的字母计数,python,Python,这里是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
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')
def count_字母(单词、字符):
计数=0
当count时,您的返回在for循环中!注意缩进,您希望行返回计数
在循环之外。由于for循环遍历word
中的所有字符,因此完全不需要外部while循环
已清理版本:
def count_letters(word, to_find):
count = 0
for char in word:
if char == to_find:
count += 1
return count
一个问题是,您正在使用count
引用您正在检查的单词中的位置和您看到的char
的数量,并且您正在使用char
引用您正在检查的输入字符和字符串中的当前字符。使用单独的变量代替
另外,将return
语句移出循环;否则,您将始终在检查第一个字符后返回
最后,您只需要一个循环来迭代字符串。去掉外部while
循环,就不需要跟踪字符串中的位置
根据这些建议,您的代码如下所示:
def count_letters(word, char):
count = 0
for c in word:
if char == c:
count += 1
return count
我觉得有几件事不对
重复使用标识符char
,这样会导致问题
你说的是if char==word[count]
而不是word[some index]
在for循环的第一次迭代之后返回李>
您甚至不需要而。如果将char参数重命名为search
for char in word:
if char == search:
count += 1
return count
其他答案显示了代码的错误。但如果你不只是为了锻炼,还有一种内置的方法:
>>> 'banana'.count('a')
3
Danben给出了更正后的版本:
def count_letters(word, char):
count = 0
for c in word:
if char == c:
count += 1
return count
这里有一些其他的方法,希望他们能教你更多关于Python的知识
类似,但循环的较短。利用布尔值可以在为真时变为1,在为假时变为0的事实:
def count_letters(word, char):
count = 0
for c in word:
count += (char == c)
return count
循环的缩写通常可以转换为列表/生成器理解。这将创建一个与每个字母对应的整数列表,如果字母与字符不匹配,则为0;如果字母与字符不匹配,则为1,然后对它们求和:
def count_letters(word, char):
return sum(char == c for c in word)
下一个选项过滤掉所有与字符不匹配的字符,并计算剩余的字符数:
def count_letters(word, char):
return len([c for c in word if c == char])
或者,您可以使用:
mystring = 'banana'
number = mystring.count('a')
您有许多问题:
- 正如其他人已经指出的那样,您的缩进存在问题
- 不需要嵌套循环。只要一个循环就足够了
- 您使用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)
或者只需使用内置方法即可:
print 'abcbac'.count('c')
三,
一个简单的方法如下:
def count_letters(word, char):
return word.count(char)
或者,还有另一种直接计算每个元素的方法:
from collections import Counter
Counter('banana')
当然,您可以指定一个元素,例如
Counter('banana')['a']
“banana.count(“ana”)
返回1而不是2
我认为该方法在字符串(或列表)上迭代的步长等于子字符串的长度,因此它不会看到此类内容
因此,如果您想要“完整计数”,您必须使用步骤1的正确循环实现自己的计数器
如果我错了,请纠正我…以下程序将字符串作为输入并输出一个数据帧,它表示字母计数
样本输入
你好
样本输出
烧焦 频率
0 H 1
1. E 1
2. L 2
3. o 一,
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)
谢谢,但我正试着了解这个概念。你不需要在Python中使用布尔值:True==1和False==0
@J.F.塞巴斯蒂安:非常有趣!我从来不知道。编辑以反映另一个变量sum(如果x==值,则iterable中的x为1)
。如果iterable没有count()
方法,它可能会很有用。我注意到'banana'.count('ana')返回1,而不是您可能期望的2。我认为您的代码缩进正确。你会得到一个缩进错误。
from collections import Counter
Counter('banana')
Counter('banana')['a']
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)