Python - 计算列表

时间:2017-08-17 15:08:05

标签: python string list substring

我知道计算列表项的简单事件非常简单:

>>>[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

我想知道如何计算列表中每次出现的子串外观,谢谢。

4 个答案:

答案 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'出现在字符串元素中时,都会返回TrueTrue的整数值为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