计算字符串列表中子字符串的出现次数

新手上路,请多包涵

我知道计算列表项的简单出现次数非常简单:

 >>> [1, 2, 3, 4, 1, 4, 1].count(1)
3

但是我想知道如何做的是每次一个字符串出现在列表条目的子字符串中时进行计数。

例如,我想看看 --- 在列表中出现了多少次 foo data

 data = ["the foo is all fooed", "the bar is all barred", "foo is now a bar"]

正在做:

 d_count = data.count('foo')
print("d_count:", d_count)

产生:

 d_count: 0

但我希望得到:

 d_count: 2

我也试过这样做:

 d_count = data.count(any('foo' in s for s in data))
print("d_count:", d_count)

但结果也为零。

我想知道如何计算列表中子串出现的次数。

原文由 theprowler 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 398
2 个回答

您可以使用 sum 内置函数来执行此操作。也无需使用 list.count

 >>> data = ["the foo is all fooed", "the bar is all barred", "foo is now a bar"]
>>> sum('foo' in s for s in data)
2
>>>

此代码有效,因为布尔值可以被视为整数。每次 'foo' 出现在一个字符串元素中, True 被返回。 True 的整数值为 1 。所以就好像每次 'foo' 在一个字符串中,我们返回 1 。因此,对返回的 1 求和将得出 1 在一个元素中出现的次数。

编写上述代码的一种可能更明确但等效的方法是:

 >>> sum(1 for s in data if 'foo' in s)
2
>>>

原文由 Christian Dean 发布,翻译遵循 CC BY-SA 3.0 许可协议

计算所有“foo”的出现次数(不仅每个字符串一次)

 sum(s.count('foo') for s in data)

原文由 Adinath Gore 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题