かなり大きなtxtファイルから派生したオブジェクトを作成しています。コードは正常に動作していますが、実行に時間がかかります。これは、最初に探している要素が順序付けられておらず、(必然的に) 一意ではないためです。たとえば、ファイルで 2 回使用される可能性があるが、最初と最後の行にある可能性がある数字コードを探しています。私の考えは、特定のコードがどのくらいの頻度で使用されているかを確認することでした...
counter=collections.Counter([l[3] for l in self.body])
...そして、カウンターをループします。アドバンス: コードが 1 回だけ使用される場合は、ファイル全体を反復処理する必要はありません。ただし、プロセスが非常に遅くなる多くの反復で立ち往生しています。
だから私の質問は本当に:どうすれば私のコードを改善できますか? もちろん、別のアイデアは、最初にデータを注文することです。しかし、それにもかなりの時間がかかる可能性があります。
重要な部分は次の方法です。
def get_pc(self):
counter=collections.Counter([l[3] for l in self.body])
# This returns something like this {'187':'2', '199':'1',...}
pcode = []
#loop through entries of counter
for k,v in counter.iteritems():
i = 0
#find post code in body
for l in self.body:
if i == v:
break
# find fist appearence of key
if l[3] == k:
#first encounter...
if i == 0:
#...so create object
self.pc = CodeCana(k,l[2])
pcode.append(self.pc)
i += 1
# make attributes
self.pc.attr((l[0],l[1]),l[4])
if v <= 1:
break
return pcode
コードで問題が十分に説明されていることを願っています。そうでない場合はお知らせください。提供された情報を拡大します。