计算集合列表中的多个匹配项

时间:2016-03-27 09:47:57

标签: python list count

有没有办法计算一组字符串列表的出现次数?

例如,当我有这个列表时,它会计算7 ' '个空白。

list = [[' ', ' ', ' ', ' ', ' ', ' ', ' ']]
print(list.count(' '))

有没有办法可以做同样的事情,但是对于一组多个列表?像这样,例如下面:

set = [[' ', ' ', ' ', ' ', ' ', ' ', ' '], 
       [' ', ' ', ' ', ' ', ' ', ' ', ' '], 
       [' ', ' ', ' ', ' ', ' ', ' ', ' ']]
print(set.count(' '))

当我以同样的方式执行此操作时,我得到的输出是0而不是实际的出现次数。

1 个答案:

答案 0 :(得分:7)

解决方案

这有效:

>>> data = [[' ', ' ', ' ', ' ', ' ', ' ', ' '], 
            [' ', ' ', ' ', ' ', ' ', ' ', ' '], 
            [' ', ' ', ' ', ' ', ' ', ' ', ' ']]
>>> sum(x.count(' ') for x in data)
21

您需要计入每个子列表。我使用generator expression来执行此操作并对所有子列表中的结果求和。 顺便说一句,不要使用set作为变量名。它是一个内置的。

性能

虽然在许多情况下并不重要,但性能可能很有趣:

%timeit sum(x.count(' ') for x in data)
1000000 loops, best of 3: 1.28 µs per loop

VS

%timeit sum(1 for i in chain.from_iterable(data) if i==' ')
100000 loops, best of 3: 4.79 µs per loop