2016-11-06 7 views
0
import itertools 
printable = 'abcdefghijklmnopqrstuvwxz' 
all_possibilites = ([''.join(i) for i in itertools.product(printable, repeat = 3)]) 
comparison = ['zd'] 
if comparison in all_possibilities: 
    print("match") 

これは私のコードのスニペットです。私の意図は、すべてのアルファベットの組み合わせを生成することです。スニペットには3文字の制限があります。制限が大きすぎると、Pythonはメモリエラーを返します。私の質問は次のとおりです:メモリから誤った結果を削除するにはどうすればよいですか?

メモリではなく、唯一の時間制限であるために、一致しなかった組み合わせをメモリから削除する方法はありますか?文字の制限が5だったとしますか?これについてのこれ以上の読書も役に立つでしょう。

+0

達成しようとしている目的はなんですか?すべてのアルファベットの組み合わせによって、どういう意味ですか?あなたが無限に向かって反復サイズを増やすと、無限の組み合わせがあります。あなたが作るすべてのn文字の組み合わせが存在するので、比較の目的は何ですか? itertools.product(range(3)、repeat = 3)を使用している場合は、0,1,2の3桁の組み合わせが可能です。存在するかどうかを確認する必要はありません。もちろん、メモリは速くいっぱいになります。n = 5の場合、すでに26^5の組み合わせがあります。 – Daniel

答えて

0

主な欠点は、最初に完全なリストを作成してからフィルタリングしようとしていることです。それはメモリ内の完全なリストを持ってくるので問題です。

あなたが実際に必要があります任意の要素を、リスト内包表記の内側にあなたの条件を追加するに保つ方が良いと思います:あなたが最後にall_posibilitiesを反復処理するために探しているなら、

all_posibilities = ["".join(i) for i in itertools.product(printable, repeat = 5) if 'a' or 'b' in i] 
             ## ^^ place your condition here 
print(len(all_posibilities)) 

また、それをメモリフットプリントをさらに制限するジェネレータを作成することは理にかなっています。

関連する問題