我正在做一些事情,首先我必须拆分一个字符串(它是一个paragaph),然后取下每个字符串的标点符号。为此,我做了以下事情:
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”中有多少单词结束。我尝试了各种各样的方法,但由于某些原因,当他们应该数10时,他们总是数为0.这是我最近的尝试:
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))
我做错了什么?
答案 0 :(得分: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_count增加一次,而不是多少字符串以'后缀'结尾。
答案 1 :(得分:1)
你可以这样做:
suffix_count = len([s for s in a if s.endswith(suffix)])
只需形成以后缀结尾的所有字符串的列表,然后计算该列表的长度,这当然是以后缀结尾的字符串数。我认为它比明确的for
循环更清晰。
答案 2 :(得分:1)
使用rstrip
删除punc和sum的方法更简单,因此我们不需要遍历每个字符:
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]
答案 3 :(得分: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。
希望有所帮助