2016-11-15 58 views
1

我試圖從任何給定的字符串中找到固定單詞的出現次數。從隨機文本(Print hackerearth)打印計數(單詞出現)

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

從上面的輸出列表中,我想計算word的總髮生率。

如何獲得固定詞彙的總數以及其他方式使此代碼更容易?

+0

總計什麼? Fixed_word或s。你請澄清你的目標。 – Chandan

+0

@Chandan我想找到沒有。時代'hackerearth'可以在任何給定的文本中找到 –

回答

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值爲0用於word爲空字符串的情況。

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