Seite 1 von 1

Kombinationen/Permutationen

Verfasst: Freitag 23. Februar 2018, 15:59
von snoopy48
Hi!

Habe da ein Snippet gefunden, mit dem man sehr praktisch alle Kombinationen erstellen kann.
Würde jetzt aber gerne unter letters(1) kein festes Zeichen definieren, sondern eine Variable (alle), die ich zuvor mit allen möglichen Permutationen von zB. A und B erstellt habe. Leider ist das Ergebniss nicht ganz zufriedenstellend, denn anscheinend interpretiert er die Variable anders. Gibt es da einen Weg oder muss man das ganz anders anpacken?

Code: Alles auswählen

import itertools
from itertools import product

L = ["A", "B"]
alle = list(itertools.permutations(L))
alle = '\n'.join(''.join(r) for r in alle)

def keypad(number):
    x = "1"
    letters = {'1':[alle],
               '2':['1', '2', '3']}
    return [''.join(i) for i in product(*[letters[i] 
        for i in number ])]


if __name__ == "__main__":
    words = keypad('12')
    print '\n'.join(words)
  
Das Ergebnis ist:
AB
BA1
AB
BA2
AB
BA3

sollte aber wie folgt sein:
AB1
BA1
AB2
BA2
AB3
BA3

Re: Kombinationen/Permutationen

Verfasst: Freitag 23. Februar 2018, 19:53
von Sirius3
@snoopy48: schau Dir man genau an, was in `alle` drinsteht, und ob es das ist, was Du denkst und willst.
Die vielen ineinander verschachtelten Listen und joins machen es für mich schwer lesbar. Versuche nicht alles in eine Zeile zu schreiben, dann kannst Du auch die Zwischenergebnisse prüfen, ob sie dem entsprechen, was Du denkst.

Re: Kombinationen/Permutationen

Verfasst: Samstag 24. Februar 2018, 19:31
von snoopy48
Habe schon allen Formen für die Inhalte von "alle" ausprobiert.
Selbst wenn ich "alle" direkt definiere, also ohne die Funktion, schaffe ich es nicht:

Code: Alles auswählen

alle = "'A','B'"

geht z.B. auch nicht.

Re: Kombinationen/Permutationen

Verfasst: Samstag 24. Februar 2018, 21:04
von Sirius3
@snoopy48: vergleich mal, was der Inhalt von »letters['1']« und »letters['2']« ist und was da der entscheidende Unterschied ist.

Re: Kombinationen/Permutationen

Verfasst: Sonntag 25. Februar 2018, 13:44
von snoopy48
Ah, ja, hätte korrekterweise schreiben müssen:

Code: Alles auswählen

alle = "'AB','BA'"
Das Problem bleibt aber bestehen. Wenn ich Python recht verstehe, sollte:

Code: Alles auswählen

    
    letters = {'1':[alle],
               '2':['1', '2', '3']}
doch Folgendes ergeben:

Code: Alles auswählen

    
    letters = {'1':['AB','BA'],
               '2':['1', '2', '3']}

Re: Kombinationen/Permutationen

Verfasst: Sonntag 25. Februar 2018, 14:14
von Sirius3
@snoopy48: ob Deine Vermutung richtig ist, kannst Du doch ganz leicht selbst prüfen. Dass das nicht der Fall ist, weil ein String etwas anderes ist als eine Liste, siehst Du ja am Ergebnis.