在一个集合列表中计算多个出现次数

3
有没有一种方法来计算一组字符串列表的出现次数?
例如,当我有这个列表时,它会计算出7个空格。
list = [[' ', ' ', ' ', ' ', ' ', ' ', ' ']]
print(list.count(' '))

有没有办法对多个列表执行相同的操作?例如以下这样的情况:
set = [[' ', ' ', ' ', ' ', ' ', ' ', ' '], 
       [' ', ' ', ' ', ' ', ' ', ' ', ' '], 
       [' ', ' ', ' ', ' ', ' ', ' ', ' ']]
print(set.count(' '))

当我以相同的方式操作时,输出结果是0而不是实际出现次数。
1个回答

7

解决方案

以下方法可行:

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

你需要对每个子列表进行计数。我使用生成器表达式来完成这个任务,并对所有子列表的结果求和。

顺便说一下,不要将set作为变量名,它是一个内置函数。

性能

虽然对于许多情况来说并不那么重要,但性能可能很有趣:

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

对比。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接