2016-03-21 11 views
0

ich diesen Code habe:Min/max für itertools in Python

import itertools 
res = itertools.product('abc', repeat=3) 
for i in res: 
    print ''.join(i) 

Das Problem ist, ich weiß nicht, wie ich kann auch ein Minimum und Maximum zu dem Wort hinzufügen, das ist gonna die Ausgabe sein? Also lassen Sie uns sagen, ich habe die Buchstaben 'a', 'b' und 'c' eingegeben, aber ich möchte nur ein Minimum 1 Buchstaben und maximal 2 Buchstaben Wort: wie würde ich das tun? Ich habe bereits im Internet gesucht, konnte aber nichts finden. Es soll ein Wörterbuch für Brute-Force machen.

+0

Was meinen Sie mindestens 1 Buchstabe? Wie willst du 'aa' nicht? – Suever

Antwort

2

Verwenden Sie itertools.permutations(). Verketten Sie dann die Ergebnisse.

S = [x for x in permutations('abc',2)] + [ x for x in permutations('abc',1)] 

Eigentlich könnten Sie auch products verwenden. Der einzige Unterschied besteht darin, dass Produkte doppelte Ergebnisse entfernen. Aber du wirst keine Duplikate haben, wenn alle Elemente verschieden sind.

+0

Betrachtet man den Kontext (Aufbau eines Wörterbuchs für einen Brute-Force-Angriff), wäre es sinnvoll, Duplikate zuzulassen, also wäre die Verwendung von Permutationen besser. –

1

Was ist damit?

import itertools 
min_letters = 1 
max_letters = 2 
for num in range(min_letters, max_letters + 1): 
    res = itertools.product('abc', repeat=num) 
    for i in res: 
     print ''.join(i)