【发布时间】:2014-02-01 08:22:36
【问题描述】:
有没有更简单的方法来按长度过滤掉 Counter 键?
我尝试了以下方法,它给出了过滤计数器的正确输出,但它通过计数器作为列表进行迭代,然后再次将列表放入计数器。有没有一种更简单、计算成本更低的方法来做同样的事情?
from collections import Counter
x = Counter(['a','a', 'ab', 'c', 'hij', 'k'])
threes = Counter([i for i,j in x.items() if len(i) == 3])
twos = Counter([i for i,j in x.items() if len(i) == 2])
【问题讨论】:
-
您是否有理由特别坚持使用
Counter对象?似乎你会更好地使用一个自定义的Counter类对象,它会在一次插入时进行专门的计数,而不是一些将你需要的东西硬塞到Counter的多遍解决方案。 -
因为流水线后期会发生一些矢量化,所以基本的 Counter 很容易管理。
-
但是
Counter就像dict一样用于阅读。仍然没有看到特别需要Counter。 -
一个计数器 is 是一个默认字典,据我所知,但有一些自定义方法(你没有使用?)顺便说一句,我预计它会稍微如果使用生成器会更快(即,而不是
Counter([x for x in y]),只需执行Counter(x for x in y)。我在 python 2.6 上,所以没有计数器,但无法运行此比较。
标签: python collections counter