我试图从任何给定的字符串中找到固定字的出现次数。
固定字=' hackerearth '
随机字符串可能是s =' aahkcreeatrhaaahkcreeatrha '
现在从字符串我们可以生成2次hackerearth。
我写了一些代码来查找字符串中的(h,a,e,r,c,k,t)字母的数量:
代码:
word = list(raw_input())
print word
h = word.count('h')
a = word.count('a')
c = word.count('c')
k = word.count('k')
e = word.count('e')
r = word.count('r')
t = word.count('t')
if (h >= 2 and a >= 2 and e >= 2 and r >=2) and (c >= 1 and k >= 1 and t >=1 ):
hc = h/2
ac = a/2
ec = e/2
rc = r/2
num_words = []
num_words.append(hc)
num_words.append(ac)
num_words.append(ec)
num_words.append(rc)
num_words.append(c)
num_words.append(k)
num_words.append(t)
print num_words
输出:
[2, 4, 2, 2, 2, 2, 2]
从上面的输出列表中,我想计算单词的总出现次数。
如何获得固定单词的总数以及使这段代码更容易的其他方法?
答案 0 :(得分:2)
您可以使用Counter
:
from collections import Counter
s = 'aahkcreeatrhaaahkcreeatrha'
word = 'hackerearth'
wd = Counter(word)
sd = Counter(s)
print(min((sd.get(c, 0) // wd[c] for c in wd), default=0))
输出:
2
上面的代码将创建两个dict
类似的计数器,其中字母是键,它们的出现是值。然后它将使用生成器表达式迭代单词中找到的字母,并为每个字母生成比率。 min
将选择最低比率,default
的{{1}}值用于0
为空字符串的情况。
答案 1 :(得分:0)
在查找子字符串时,您需要考虑字符顺序,而不仅仅是计数
这样的事情应该有效:
def subword(lookup,whole):
if len(whole)<len(lookup):
return 0
if lookup==whole:
return 1
if lookup=='':
return 1
if lookup[0]==whole[0]:
return subword(lookup[1:],whole[1:])+subword(lookup,whole[1:])
return subword(lookup,whole[1:])
例如:
In [21]: subword('hello','hhhello')
Out[21]: 3
因为您可以选择3 h
中的每一个并用剩余部分构造单词hello