スレッドまたはマルチプロセッシングなしですばやく終了するには、次のコードが必要です。誰かが非常に感謝されるどんなトリックを知っていれば。多分for i in enumerate()
か、計算する前にリストを文字列に変更すると、わかりません。
以下の例では、ランダムシーケンスを使用して変数を再作成しようとしましたが、これはループ内のいくつかの条件を無駄にしています...この例では大丈夫です。コードは少し長くかかります。 現在、私のi7では、以下の例(ほとんどの場合、条件の一部を迂回します)が1秒で完了します。できるだけ少なくしたいと思います。 ListVarの浅いコピーを作成Pythonの場合、次のコードが必要です。
import random
import time
import collections
import cProfile
def random_string(length=7):
"""Return a random string of given length"""
return "".join([chr(random.randint(65, 90)) for i in range(length)])
LIST_LEN = 18400
original = [[random_string() for i in range(LIST_LEN)] for j in range(6)]
LIST_LEN = 5
SufxList = [random_string() for i in range(LIST_LEN)]
LIST_LEN = 28
TerminateHook = [random_string() for i in range(LIST_LEN)]
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Exclude above from benchmark
ListVar = original[:]
for b in range(len(ListVar)):
for c in range(len(ListVar[b])):
#If its an int ... remove
try:
int(ListVar[b][c].replace(' ', ''))
ListVar[b][c] = ''
except: pass
#if any second sufxList delete
for d in range(len(SufxList)):
if ListVar[b][c].find(SufxList[d]) != -1: ListVar[b][c] = ''
for d in range(len(TerminateHook)):
if ListVar[b][c].find(TerminateHook[d]) != -1: ListVar[b][c] = ''
#remove all '' from list
while '' in ListVar[b]: ListVar[b].remove('')
print(ListVar[b])
(リスト内すなわち見つけるmstrings):一緒にこれらの提案を置く
のようなものを提供します。私はそれに 'swig'を使います。また、おそらくリストの代わりにハッシュが速くなるでしょう –
解決しようとしている問題を説明できますか?コードを理解してより良い方法を考え出すよりも、 "効率的な方法は何ですか"という質問に簡単に答えることができます。 – thesamet
ろ過プロセスを通してリストを実行したい – Rhys