gpt4 book ai didi

python - 从 Counter 中删除最不常见的元素

转载 作者:太空宇宙 更新时间:2023-11-03 15:09:38 25 4
gpt4 key购买 nike

是否有任何“更快的方法”从 Counter 中删除值小于特定值的键值对?

我做了以下事情:

counter_dict = {k:v for k, v in counter_dict.items() if v > 5}

最佳答案

当前代码的主要问题是对 .items 的调用,它将创建所有项目的列表:

一个优化可能是使用 Counter.iteritems而不是 .items,以节省创建列表并再次遍历它的代价。

>>> from collections import Counter
>>> cnt = Counter("asbdasdbasdbadaasasdasadsa")
>>> {k:v for k,v in cnt.iteritems() if v > 5}
{'a': 10, 's': 7, 'd': 6}

另一个优化可能是不调用 .items 方法,而是迭代键并使用键访问值:

>>> from collections import Counter
>>> cnt = Counter("asbdasdbasdbadaasasdasadsa")
>>> {k:cnt[k] for k in cnt if cnt[k] > 5}
{'a': 10, 's': 7, 'd': 6}

如果我们尝试在 ipython 中测量与 %timeit 的差异,使用带有您提到的 if 条件的示例计数器, iteritems 轻松获胜:

In [1]: import random

In [2]: from collections import Counter

In [3]: MILLION = 10**6

In [4]: cnt = Counter(random.randint(0, MILLION) for _ in xrange(MILLION))

In [5]: %timeit {k:v for k, v in cnt.iteritems() if v < 5}
10 loops, best of 3: 140 ms per loop

In [6]: %timeit {k:v for k, v in cnt.items() if v**2 < 5}
1 loops, best of 3: 290 ms per loop

In [7]: %timeit {k:cnt[k] for k in cnt if cnt[k] < 5}
1 loops, best of 3: 272 ms per loop

随着条件的变化:

In [8]: %timeit {k:v for k, v in cnt.iteritems() if v > 5}
10 loops, best of 3: 87 ms per loop

In [9]: %timeit {k:v for k, v in cnt.items() if v > 5}
1 loops, best of 3: 186 ms per loop

In [10]: %timeit {k:cnt[k] for k in cnt if cnt[k] > 5}
10 loops, best of 3: 153 ms per loop

关于python - 从 Counter 中删除最不常见的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28499024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com