Seite 1 von 1

Variable Anzahl an for Schleifen

Verfasst: Montag 26. Januar 2009, 12:05
von Python 47
Hey,

ich habe öfter das Problem, dass ich eine Variable Anzahl an for Schleifen benötige. Kann sein, dass ich den Wald vor lauter Bäumen nicht seh aber mir fällt einfach keine elegante Lösung dazu ein. Um mal ein Beispiel zu geben:


Code: Alles auswählen

import string
buchstaben_g = string.uppercase
buchstaben_k = string.lowercase

for buchstabe_k in buchstaben_k:
     for buchstabe_g in buchstaben_g:
         print (buchstabe_k, buchstabe_g)
Dieser Code würde alle möglichen Zusammenstellungen von Groß und Kleinbuchstaben bei einer Anzahl von 2 ausgeben. Wie könnte ich es aber mit einer Variablen Anzahl handlen? z.B. soll eine Zahl eingegeben und dann alle Möglichkeiten von Groß - und Kleinbuchstaben dieser Länge ausgegeben werden.

Verfasst: Montag 26. Januar 2009, 12:25
von HerrHagen
im Modul itertools gibts das (ab Py 2.6 enthalten):

Code: Alles auswählen

def combinations(iterable, r):
    # combinations('ABCD', 2) --> AB AC AD BC BD CD
    # combinations(range(4), 3) --> 012 013 023 123
    pool = tuple(iterable)
    n = len(pool)
    if r > n:
        return
    indices = range(r)
    yield tuple(pool[i] for i in indices)
    while 1:
        for i in reversed(range(r)):
            if indices[i] != i + n - r:
                break
        else:
            return
        indices[i] += 1
        for j in range(i+1, r):
            indices[j] = indices[j-1] + 1
        yield tuple(pool[i] for i in indices)

Verfasst: Montag 26. Januar 2009, 12:51
von Python 47
Hey,

die Funktion kannte ich noch nicht. Vielen Dank. :)

Verfasst: Montag 26. Januar 2009, 13:16
von HWK
itertools.product würde wahrscheinlich den Zweck besser erfüllen.
MfG
HWK

Verfasst: Montag 26. Januar 2009, 13:29
von Python 47
Genau das gleiche hab ich nach austesten der funktion combinations auch festgestellt. :D

Aber nun hab ich gefunden was ich gesucht hab.