2016-10-14 8 views
0

アルゴリズム:ループするループの数を入力し、最初の文字をロックし、2番目の文字をループし、最初の2個をロックし、3番目をループするなど。出力はa、b、c、d ... aa、ab、ac、ad ... aaa、aab、aac ...のようになります。私は非常にPythonに新しいです。私はアルファベットを循環するものを持っていますが、私の問題は最初のものをロックして2番目のものを繰り返すことです。python 2.7ワードジェネレータ

w = 'abcdefghijklmnopqrstuvwxyz' 
n = input ("# of characters: ") 

for a in range(0,n): 
     for i in w: 
       print i 
+0

組み込みモジュールを使用できますか? itertoolsは特にこれを劇的に単純化するでしょう。 – ShadowRanger

+0

私は組み込みのモジュールを使うことができます。私は非常に新しいので、私は彼らが何であるか、またはそれぞれの能力を知らない。 – lineman2208

+1

次に、[itertools'](https://docs.python.org/2/library/itertools.html)、具体的には 'combinations'関数(https://docs.python .org/2/library/itertools.html#itertools.combinations)。レコードのために、 'tuple'のジェネレータの' combined'のような関数の出力を 'str'のジェネレータに変換する効率的な方法は、itertools.combinations(...)のtupvalのために' :itertools.imap( ''。join、itertools.combinations(...))のstrvalの 'to ':' 'タプル'それらは生成されると 'str'に変換されます。 – ShadowRanger

答えて

0
alphabet = 'abcdefghijklmnopqrstuvwxyz' 
l= [''] 
for i in range(input): 
    l = [letter + item for letter in alphabet for item in l] 
    for item in l: 
     print(item) 

私はあなたのために、「ロック」を取り扱い、これは一度に一つの出力を生成するためにitertools.combinationsを使用して、巨大なRAMの要件を回避するために

+0

注:これには、巨大な_huge_リストを格納することが含まれます。それぞれのループは 'len == i + 1'の' 26 **(i + 1) '' str'を作成するので、長さ6ワード、400GB程度の場合は16GBのRAMの近くに必要ですハンドルの長さは7ワード、長さは11 TBです。私はこれをしないことを強く推奨します。 CPUの作業は十分に悪いですが、ページのスラッシングはこれを本当にひどいものにします。 – ShadowRanger

+0

一時ファイルからtxtファイルに変更した場合はどうなりますか?それはいくらか圧力をかけるだろうか?そのため、printの代わりにファイルに保存します。 – lineman2208

0

探しているものだと思う。

from future_builtins import map # Not needed on Py3, only on Py2 
from itertools import combinations 

w = 'abcdefghijklmnopqrstuvwxyz' 
# Don't use input on Py2; it's an implicit eval, which is terrible 
# raw_input gets str, and you can explicitly convert to int 
n = int(raw_input("# of characters: ")) 

# You want 1-n inclusive on both ends, not 0-n exclusive at the end, so tweak range 
for wdlen in xrange(1, n+1): 
    # Generator based map with ''.join efficiently converts the tuples 
    # from combinations to str as you iterate 
    for wd in map(''.join, combinations(w, wdlen)): 
     print wd