2011-07-26 5 views
3

간단한 dict 생성기를 만들려고합니다. 그것은 작동하지만 그것은 아직 매우 기능적이지 않습니다.파이썬에서 매우 간단한 사전 생성기를 개선하십시오.

코드를 건드리지 않고도 출력의 최대 크기를 변경할 수있어 성능을 향상시키고 싶습니다.

letr='abcdefghijklmnopqrstuvwxyz' 
for i in range(len(letr)): 
    t=letr[i] 
    print t 
    for t2 in letr: 
     print t+t2 
     for t3 in letr: 
      print t+t2+t3 
      for t4 in letr: 
       print t+t2+t3+t4 
       for t5 in letr: 
        print t+t2+t3+t4+t5 
+1

이것은 BTW codereview.stackexchange.com –

+0

에 대한 좋은 질문이 될 것입니다 :

dict_gen()는 발전기를 반환합니다,하지만 당신은 인덱스로 요소에 액세스해야 할 경우 당신은 언제나 list()로 전달할 수 있습니다 수입 문자열; string.lowercase' 그래서 당신은 알파벳을 다시 입력하지 않아도됩니다 : p – Hassek

답변

4
import itertools 

def dict_gen(n): 
    letr = 'abcdefghijklmnopqrstuvwxyz' 
    return itertools.chain(''.join(j) for i in range(n) 
          for j in itertools.product(letr, repeat=i+1)) 

사용법 : 이것은 당신의 예 ('AA', 'BB'등) 등의 중복 포함됩니다 다른 답변의 일부와는 달리

for word in dict_gen(n): # replace n with the max word length you want 
    print word 

. '

>>> words = list(dict_gen(5)) 
>>> len(words) == 26 + 26**2 + 26**3 + 26**4 + 26**5 # verify correct length 
True 
>>> words[20:30] # transition from one letter to two letters 
['u', 'v', 'w', 'x', 'y', 'z', 'aa', 'ab', 'ac', 'ad'] 
>>> words[-10:] # last 10 elements 
['zzzzq', 'zzzzr', 'zzzzs', 'zzzzt', 'zzzzu', 'zzzzv', 'zzzzw', 'zzzzx', 'zzzzy', 'zzzzz'] 
+0

니스! 모든 대답은 좋지만 당신의 답변은 가장 빠릅니다. 'python dict.py | grep -i zzzzz'는 내 노트북에서 9 초가 걸립니다. –

1
letr = ''.join(chr(o) for o in range(ord('a'), ord('z') + 1)) 
import itertools 
print [''.join(word) for word in itertools.permutations(letr, 5)] 
1

Itertools은 당신의 가장 친한 친구입니다. 당신은 모든 permuations를 얻고 싶다면

>>> import itertools 
>>> gen = ("".join(i) for i in itertools.permutations(letr, 5)) 
>>> list(gen)[-10:] 
['zyxwm', 'zyxwn', 'zyxwo', 'zyxwp', 'zyxwq', 'zyxwr', 'zyxws', 'zyxwt', 'zyxwu', 'zyxwv'] 

, 당신은 발전기를 직접 작성할 수

import itertools 

def perms(seq): 
    for n in range(len(seq)+1): 
     for i in itertools.permutations(seq, n): 
      yield i 

확인 더 많은 정보를 원하시면 itertools 및 발전기에 대한 파이썬 문서를.

+0

그의 permutations, 조합이 아니라는 것을 유의하십시오. – stefan

+0

@stefan, 감사합니다, 수정 된 답변. – utdemir

관련 문제