0
print sum(1 for x in alist if x[1] == 8)

这段代码运行良好,但是太慢了。有没有比这更好的方法。因为,我的列表非常大,计算需要很多时间。你知道更好更快的方法吗?

4

3 回答 3

2

您必须创建索引或缓存计数来加速此类代码;用内存换速度。

无论您在哪里处理您的列表(添加到列表、从中删除、编辑条目),您还可以维护您的索引。例如,如果您有一个以 id 作为键并将其频率作为值的计数字典,您所要做的就是直接查找计数,并确保在您操作时计数保持最新alist

管理此问题的最佳方法是将列表封装在自定义类型中,以便您可以控制数据结构的所有操作并维护额外信息。

于 2012-11-18T21:00:03.557 回答
0

不知道它会快多少,但是

len([x for x in alist if x[1] == 8])

是清楚一点。

于 2012-11-18T21:00:45.333 回答
0

我会使用 numpy. 我的 numpy 技能有点生疏,但len(np_array == 8)可以为您提供单个深度数组所需的东西。我想对你来说会是len(np_array[:,1]),但我必须检查(这假设你的问题可能使用 numpy 数组)

于 2013-11-07T20:47:53.900 回答