2015-02-06 38 views
2

我正在處理一些事情,首先我必須拆分一個字符串(這是一個paragaph),然後取下每個字符串的標點符號。爲此,我做了以下操作:如何在python中計算後綴?

a = string1.split() 

print(a) 

punc = "?.,!" 

a = ["".join(c for c in s if c not in punc) for s in a] 

print(a) 

之後,我必須計算有多少單詞以「ing」結尾。我嘗試了各種方法,但由於某些原因,他們總是指望0時,他們應該算作10.這是我最新的嘗試:

suffix = "ing" 

suffix_count = 0 

if any (''.endswith(suffix) for s in a): 

    suffix_count += 1 

print ("Found {} words ending in ing".format(suffix_count)) 

我在做什麼錯?

回答

3

而不是

if any (''.endswith(suffix) for s in a): 
    suffix_count += 1 

嘗試

suffix_count = sum(1 for s in a if s.endswith(suffix)) 

你的代碼的問題是你正在檢查空字符串是否以'suffix'結尾(它總是爲false),但即使你有這個檢查:你只是增加suffix_count一次與多少個字符串無關以'後綴'結尾。

+0

這個應用程序耳朵幾乎是我的答案的逐字重述,雖然提議的解決方案比延伸到OP預期的循環使用更簡潔。 – ely 2015-02-06 14:39:19

+0

@ prpl.mnky.dshwshr嗯,我希望我們都指出同樣的問題是暗示我們是正確的。 ;-)對於什麼是值得的,當我開始寫我的答案時,你的回答並沒有解決'suffix_count'從來沒有增加過多的事實。我看到你現在補充說。 – 2015-02-06 14:41:18

+0

我應該澄清,這不是對你的答案的判斷(這很好),而只是一個關於兩個相互重複的答案的形式指標。這些小Python問題發生了很多事情,但我認爲社區總體上希望這種情況發生得更少,並且因爲剩餘答案會更少,而這些答案是彼此的副本(即使這些答案的作者並不打算這樣做,因爲我相信你不打算複製任何東西)。 – ely 2015-02-06 14:43:03

0

嘗試了這一點:

a = ["singing", "dancing", "playing"] 

suffix = "ing" 

suffix_count = 0 

for s in a: 
    if s.endswith(suffix): 
     suffix_count += 1 

print ("Found {} words ending in ing".format(suffix_count)) 

對於我來說,打印3

希望它可以幫助

1

你可以這樣做:

suffix_count = len([s for s in a if s.endswith(suffix)]) 

簡單地形成了以後綴結尾的所有字符串列表,然後計算該名單,這當然是與後綴結束的字符串數的長度。我認爲它比明確的for循環更清潔。

+0

這是[已經提到](http://stackoverflow.com/a/28368169/567620)在另一個答案(只是修改爲允許使用生成器與'sum'代替需要內部理解才能使用'len')。 – ely 2015-02-06 14:45:10

+0

我真的不認爲這兩個表達式是相同的。 – unwind 2015-02-06 14:47:56

+0

嗯,我們可能不同意,但是在該答案的舊版本中,使用了這個帶有理解的確切代碼,並且後來修改爲使用生成器以避免需要理解。 – ely 2015-02-06 14:48:46

1

有使用rstrip,所以我們並不需要遍歷每個字符刪除PUNC和和更簡單的方法:

sum(s.rstrip(punc).endswith("ing") for s in a) 

所以,你的雙迴路可以替換以下刪除PUNC :

a = [s.rstrip(punc) for s in a] 

而且使用string.punctuation可能會更好:

from string import punctuation 
a = [s.rstrip(punctuation) for s in a]