我知道计算列表项的简单事件非常简单:
>>>[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 = data.count(any('foo' in s for s in data))
print("d_count:", d_count)
但这也会产生:
d_count: 0
我想知道如何计算列表中每次出现的子串外观,谢谢。
答案 0 :(得分:11)
您可以使用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
>>>
答案 1 :(得分:1)
你可以试试这个:
from itertools import chain
data = ["the foo is all fooed", "the bar is all barred", "foo is now a bar"]
data = list(chain.from_iterable([i.split() for i in data]))
print(data.count("foo"))
输出:
2
答案 2 :(得分:0)
如果数据= [" abababa in foo"," abababa"]
从列表中找到" aba" 的出现, 你应该使用以下代码:
>>> data = ["abababa in foo", "abababa"]
>>> str = "aba"
>>> length = len(str)
>>> sum(element[index:index+length] == str for element in data for index,char in enumerate(element))
6
答案 3 :(得分:0)
@ChristianDean的回答很好,但是很难(至少对我来说)。因此,这里的版本更具可读性/易于理解。
count = 0
for s in data:
if 'foo' in s:
count += 1