python - 计算字符串中 Enum 的出现次数
问题描述
我正在尝试计算字符串值中 ENUM 的出现次数,例如
class numbers(Enum):
one = 1
two = 2
string = "121212123324"
string.count(str(numbers.one.value))
将枚举转换回字符串似乎非常不直观 - 有没有更快的方法?
解决方案
您的解决方案很好,您可以在下面看到 5 种方法的运行时:
from timeit import timeit
from collections import Counter
from enum import Enum
class numbers(Enum):
one = 1
two = 2
three = 3
four = 4
def approach1(products):
return Counter(products)[str(numbers.one.value)]
def approach2(products):
return products.count(str(numbers.one.value))
def approach3(products):
lst = list(map(int, products))
return lst.count(int(numbers.one.value))
def approach4(products):
cnt = Counter(products)
return (cnt[str(numbers.one.value)] , str(numbers.two.value) ,
cnt[str(numbers.three.value)] , str(numbers.four.value))
def approach5(products):
cnt_o = products.count(str(numbers.one.value))
cnt_t = products.count(str(numbers.two.value))
cnt_h = products.count(str(numbers.three.value))
cnt_f = products.count(str(numbers.four.value))
return (cnt_o , cnt_t , cnt_h , cnt_f)
funcs = approach1, approach2, approach3 , approach4, approach5
products = "121212123324"*10000000
for _ in range(3):
for func in funcs:
t = timeit(lambda: func(products), number=1)
print('%.3f s ' % t, func.__name__)
print()
输出:
6.279 s approach1
0.140 s approach2
17.172 s approach3
6.403 s approach4
0.491 s approach5
6.340 s approach1
0.139 s approach2
16.049 s approach3
6.559 s approach4
0.474 s approach5
6.245 s approach1
0.143 s approach2
15.876 s approach3
6.172 s approach4
0.475 s approach5
推荐阅读
- vba - 如何将变量设置为在查询中检索到的字段值
- java - 共享偏好无法获取数据
- tla+ - PlusCal:为什么公平算法仍然卡顿?
- javascript - 如何在 node.js 中进行嵌套错误处理
- javascript - 在选项卡更改时隐藏、取消隐藏内容
- ios - 如何为 Flutter 应用注册 Apple App Id Bundle?
- c++ - const 是否允许在这里进行(理论上的)优化?
- syntax-highlighting - nomachine 鼠标高亮显示不显示
- javascript - facebook 是否为移动设备和台式机设计不同的网页
- angular - angular 2 事件发射器无法正常工作