我正在尝试计算刺痛中字母的出现次数。我得到了Python所做的部分,但是,现在我想要的是,如果它出现两次,他就不会计算两次。
所以,“我的名字”,应该给出一个字符串'21111',而不是'211121'(所以不计算两次m的两次)。
目前的代码是:
for char in tested_str2:
if char in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ':
x = tested_str2.count(char)
percentage = percentage + str(x)
答案 0 :(得分:1)
您可以使用collections.Counter
和set
:
>>> from collections import Counter
>>> strs = ''.join(x for x in "My name" if x.isalpha()).lower()
>>> c = Counter(strs)
>>> seen = set()
>>> ''.join(str(c[item]) for item in strs
if item not in seen and not seen.add(item))
'21111'
根据@DSM的建议,您也可以使用set
代替collections.OrderedDict
:
>>> from collections import OrderedDict
>>> ''.join(str(c[item]) for item in OrderedDict.fromkeys(strs))
'21111'
答案 1 :(得分:-1)
我的Python生锈了,所以我会给你alghoritm而不是完整的代码解决方案。
循环播放字符串中的字符;
1.1将您找到的每个字符放在哈希表/字典中。第一次找到字符时,为该条目指定值1。对于同一角色的每次新遭遇,请增加此值。
创建一个空字符串foo
;
foo
字符串附加到哈希表/字典中与该字符对应的值。你可能想要代表一个在括号之间发生超过9次的单个字符,即:
如果木夹头能够并且能够夹住木头,那么木头夹头会有多少木头
会导致某些事情开始:
6 [12] 7 ...