print sum(1 for x in alist if x[1] == 8)
这段代码运行正常,但速度很慢。有没有比这更好的方法。因为,我的列表非常大,计算需要花费很多时间。你知道更好更快的方法吗?
答案 0 :(得分:2)
您必须创建索引或缓存计数以加速此类代码;交易记忆的速度。
无论您处理列表(添加到列表,从中删除,编辑条目),您都可以维护索引。例如,如果你有一个计数字典,其中ids为键,频率为值,你所要做的就是直接查看计数,并确保在操作alist
时计数保持最新
管理此方法的最佳方法是将列表封装在自定义类型中,以便您可以控制对数据结构的所有操作并保留额外信息。
答案 1 :(得分:0)
不确定它会加快多少但
len([x for x in alist if x[1] == 8])
更清楚一点。
答案 2 :(得分:0)
我会使用numpy。我的numpy技能有点生疏,但是len(np_array == 8)
会为你提供单个深度数组所需的功能。我认为你会len(np_array[:,1])
,但我必须检查(这假设你的问题可以使用numpy数组)