Python collections.Counter()运行时 - python

我只是遇到一个需要列出清单的问题,例如l = [1、2、3、4]变成dic,例如{1:1、2:1、1:3、1、4:1}。我只想知道是应该使用collections.Counter()还是自己编写一个循环来执行此操作。内置方法比我自己编写循环快吗?

参考方案

您可以随时使用timeit模块测试是否更快。在Python 3中,Counter对象提高了C性能,并且确实非常快:

>>> from timeit import timeit
>>> import random, string
>>> from collections import Counter, defaultdict
>>> def count_manually(it):
...     res = defaultdict(int)
...     for el in it:
...         res[el] += 1
...     return res
...
>>> test_data = [random.choice(string.printable) for _ in range(10000)]
>>> timeit('count_manually(test_data)', 'from __main__ import test_data, count_manually', number=2000)
1.4321454349992564

>>> timeit('Counter(test_data)', 'from __main__ import test_data, Counter', number=2000)
0.776072466003825

在这里Counter()快了2倍。

就是说,除非您在代码的性能关键部分中进行统计,否则请着重于可读性和可维护性,在这一方面,Counter()胜过您自己编写的代码。

除此之外,Counter()对象在词典之上提供了功能:它们可以被视为多集(您可以对计数器进行加或减,并产生并集或交集),并且可以按计数有效地为您提供前N个元素。

collections.ChainMap的目的是什么? - python

在Python 3.3中,向 ChainMap 模块添加了 collections 类: 提供ChainChain类,用于快速链接许多映射 因此可以将它们视为一个单元。它通常比 创建一个新字典并运行多个update()调用。例:>>> from collections import ChainMap >>> x = {&#…

Python 3运算符>>打印到文件 - python

我有以下Python代码编写项目的依赖文件。它可以在Python 2.x上正常工作,但是在使用Python 3进行测试时会报告错误。depend = None if not nmake: depend = open(".depend", "a") dependmak = open(".depend.mak&#…

Python:对于长时间运行的进程,通过还是休眠? - python

我正在编写一个队列处理应用程序,该应用程序使用线程等待和响应要发送到该应用程序的队列消息。对于应用程序的主要部分,只需要保持活动状态即可。对于像这样的代码示例:而True: 通过要么而True: time.sleep(1)哪一个对系统的影响最小?除了保持python应用运行外,什么都不做的首选方式是什么? 参考方案 我可以想象time.sleep()会减少系…

Python:无符号32位按位算术 - python

试图回答另一篇有关其解决方案涉及IP地址和网络掩码的文章时,我陷入了普通的按位算法。在Python中,是否存在一种标准的方式来进行按位AND,OR,XOR,NOT运算,假设输入是“32位”(可能是负数)整数或long,并且结果必须是[[ 0,2 ** 32]?换句话说,我需要一个与无符号长整数之间的C按位运算有效的Python对应物。编辑:具体问题是这样的:…

>> Python中的运算符 - python

>>运算符做什么?例如,以下操作10 >> 1 = 5有什么作用? 参考方案 它是右移运算符,将所有位“右移”一次。二进制10是1010移到右边变成0101这是5