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

このコードは正常に実行されますが、非常に遅いです。これより良い方法はありますか?私のリストは非常に大きく、計算には多くの時間がかかるためです。それを行うためのより良い、より速い方法を知っていますか?

4

3 に答える 3

2

このようなコードを高速化するには、インデックスまたはキャッシュされたカウントを作成する必要があります。速度のためにメモリを交換します。

リストを処理する場所 (リストへの追加、リストからの削除、エントリの編集) では、インデックスも維持します。たとえば、ID をキーとして、その頻度を値として持つ counts dict がある場合、カウントを直接調べて、操作中にカウントが最新の状態に保たれるようにするだけで済みます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 に答える