def charcount(stri):
for i in stri:
count = 0
for j in stri:
if stri[i] == stri[j]:
count += 1
我是python的新手,目前正在学习字符串操作,谁能告诉我这个程序有什么问题?该函数尝试打印给定字符串中每个字符的计数。
例如:string ="你身后有阴影" 我想计算每个角色在字符串中出现的次数
答案 0 :(得分:5)
计算字符串中的字符可以使用Counter()
类完成,如:
from collections import Counter
def charcount(stri):
return Counter(stri)
print(charcount('The function try to print count of each character '
'in given string . Please help'))
Counter({' ': 14, 'e': 7, 'n': 7, 't': 7, 'c': 5, 'i': 5,
'r': 5, 'h': 4, 'o': 4, 'a': 4, 'f': 2, 'u': 2,
'p': 2, 'g': 2, 's': 2, 'l': 2, 'T': 1, 'y': 1,
'v': 1, '.': 1, 'P': 1})
答案 1 :(得分:0)
这是你需要做的。迭代输入字符串并使用哈希来跟踪计数。在python中,基本哈希是一个字典。
def charCounter(string):
d = {} # initialize a new dictionary
for s in string:
if s not in d:
d[s] = 1
else:
d[s] += 1
return d
print charCounter("apple")
# returns {'a': 1, 'p': 2, 'e': 1, 'l': 1}
答案 2 :(得分:0)
您的解决方案只需稍加修改
首先你循环错误: -
看看:
def charcount(stri):
d = {}
for i in stri:
if i in d:
d[i] = d[i] +1
else:
d[i] = 1
return d
print (charcount("hello")) #expected outpu
答案 3 :(得分:0)
对代码的反馈:
在这些方面:
for i in stri:
count = 0
for j in stri:
外部循环遍历stri
中的每个字符,内部循环遍历stri
中的每个字符。这就像列表中元素的笛卡尔积,在这里不是必需的。
其次,在这一行:
if stri[i] == stri[j]:
您正在通过其索引访问stri
,但i
和j
不是索引,它们是字符本身。因此,将它们视为索引在此处不起作用,因为字符不是列表的有效索引。如果您只想访问索引,可以使用range(len())
:
for i in range(len(stri)):
count = 0
for j in range(len(stri)):
if stri[i] == stri[j]:
或者,如果您想访问元素及其索引,可以使用enumerate()
。
说完这个,你的方法太复杂了,需要重做。您需要对角色进行分组并对其进行计数。使用嵌套循环在这里是过度的。
替代方法:
有很多更好的方法可以做到这一点,例如使用collections.Counter()
和字典。这些数据结构非常适合计数。
因为它看起来像你在挣扎循环,我建议回到基础,然后尝试用字典来解决这个问题。
答案 4 :(得分:0)
计算字符串中的每个字符
>>> from collections import Counter
>>> string ="There is shadow behind you"
>>> Counter(string)
Counter({' ': 4, 'h': 3, 'e': 3, 'i': 2, 's': 2, 'd': 2, 'o': 2, 'T': 1, 'r':
1, 'a': 1, 'w': 1, 'b': 1, 'n': 1, 'y': 1, 'u': 1})
答案 5 :(得分:0)
如果您不想使用任何导入:
def charcount(string):
occurenceDict = dict()
for char in string:
if char not in occurenceDict:
occurenceDict[char] = 1
else :
occurenceDict[char] += 1
return(occurenceDict)
答案 6 :(得分:0)
in_l = ','.join(str(input('Put a string: '))).split(',')
d1={}
for i in set(in_l):
d1[i] = in_l.count(i)
print(d1)