如何在python中计算后缀?

如何在python中计算后缀?,python,string,Python,String,我在做几件事,首先我必须拆分一个字符串(这是一个段落),然后去掉每个字符串的标点符号。为此,我做了以下工作: 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 =

我在做几件事,首先我必须拆分一个字符串(这是一个段落),然后去掉每个字符串的标点符号。为此,我做了以下工作:

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))
我做错了什么?

试试这个:

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))
对我来说,它是印刷的

希望它有帮助,而不是

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

代码的问题在于,您正在检查空字符串是否以“suffix”(始终为false)结尾,但即使检查正确:您只增加了一次suffix\u count,与以“suffix”结尾的字符串数量无关。

您可以:

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

只需形成以后缀结尾的所有字符串的列表,然后计算该列表的长度,当然是以后缀结尾的字符串的数量。我认为它比显式的
for
循环更简洁。

有一种更简单的方法可以使用
rstrip
删除punc和求和,因此我们不需要在每个字符上循环:

sum(s.rstrip(punc).endswith("ing") for s in a)
因此,您的双环路可以替换为以下内容以移除punc:

a = [s.rstrip(punc) for s in a]
同时使用
字符串。标点符号可能更好:

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

这看起来几乎是对我答案的逐字重述,尽管建议的解决方案比扩展到OPs预期循环使用更简洁。@prpl.mnky.dshwshr好吧,我希望我们都指出相同的问题这一事实暗示我们是正确的。;-)值得一提的是,当我开始写我的答案时,你的答案并没有说明
suffix\u count
的增量从未超过一次。我看到你现在补充了这一点。我应该澄清,这不是对你的答案的判断(这是好的),而是关于两个相互重复的答案的纯粹形式指标。这些小Python问题经常发生,但我认为社区总体上希望这种情况发生得更少,并且有更少的相互复制的剩余答案(即使这些答案的作者并不打算这样做,因为我相信你不打算复制任何东西)。你甚至可以只做
sum(s.endswith(后缀)对于a中的s)
(但您的方式可能会稍微快一点)@acushner更重要的是,它更具可读性。当然,这种方法比较短,但布尔求和是违反直觉的。我总是建议使用
sum(如果是c,则b中的a为1)
格式进行过滤计数。这是另一个答案(只是修改为允许使用带有
sum
的生成器,而不是需要内部理解才能使用
len
)。我真的不认为这两个表达式是相同的。嗯,我们可以不同意,但在这个答案的旧版本中,使用了带有理解的精确代码,后来修改为使用生成器,以避免需要理解。@FrerichRaabe Gaah,没错,我有一个拼写错误。我希望已经修好了。谢谢。不,我想你不能把
if
部分放在
前面,你需要把
if
放在末尾。
from string import punctuation
a = [s.rstrip(punctuation) for s in a]