Python: cómo generar una lista de palabras a partir de caracteres dados de longitud específica

Quiero realizar un ataque de diccionario y para eso necesito listas de palabras. ¿Cómo generar una lista de palabras a partir de caracteres de longitud específica (o longitud de palabra de longitud mínima a longitud máxima)? Lo he probado itertools.combinations_with_replacements and itertools.permutations , pero no ayuda. No tienen todas las listas de palabras que debe devolver. Cualquier ayuda será apreciada. Gracias.

Use itertools.product :

 >>> import itertools >>> >>> chrs = 'abc' >>> n = 2 >>> >>> for xs in itertools.product(chrs, repeat=n): ... print ''.join(xs) ... aa ab ac ba bb bc ca cb cc 

Para obtener información de longitud mínima a longitud máxima:

 chrs = 'abc' min_length, max_length = 2, 5 for n in range(min_length, max_length+1): for xs in itertools.product(chrs, repeat=n): print ''.join(xs) 
 from itertools import product def allwords(chars, length): for letters in product(chars, repeat=length): yield ''.join(letters) def main(): letters = "abc" for wordlen in range(3, 5): for word in allwords(letters, wordlen): print(word) if __name__=="__main__": main() 

devoluciones

 aaa aab aac aba abb ... ccbc ccca cccb cccc 

Esta es una implementación ingenua:

 list='abcdefg' depth=8 def generate(l,d): if d<1: return for c in l: if d==1: yield c else: for k in generate(l,d-1): yield c+k for d in range(1,depth): for c in generate(list,d): print c 

Todavía no tengo suficiente reputación para comentar, así que, para hacer una lista completa basada en el ejemplo de itertools anterior:

 import itertools chrs='abc' n=6 for i in range(1,n): for xs in itertools.product(chrs, repeat=i): print ''.join(xs) 

De esta manera, tiene todas las palabras de longitud 1 hasta n en su lista.

def word_gen (inicio = 3, final = 3, elementos = 1): “” “Hud Seidu Daannaa Lista de palabras gen MSC InfoSec, CEH”

 README #for start&end #eg start= 3,end= 3 #means first words to last words should be 3 characters #for elements 1 is asci 2 is numbers 3 is asci&numbers """ import itertools #types of elements if elements ==1: elements= 'abcdefghijklmnopqrstuvwxyx' if elements ==2: elements= '0123456789' if elements== 3: elements= 'abcdefghijklmnopqrstuvwxyx0123456789' else: pass wl = [] for i in range(start,end+1): for xs in itertools.product(elements, repeat=i): wl.append(''.join(xs)) return wl