从随机文本打印计数(单词出现)(打印hackerearth)

时间:2016-11-15 09:55:42

标签: python string list

我试图从任何给定的字符串中找到固定字的出现次数。

固定字=' 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]

从上面的输出列表中,我想计算单词的总出现次数。

如何获得固定单词的总数以及使这段代码更容易的其他方法?

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