Kombinationen/Permutationen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
snoopy48
User
Beiträge: 14
Registriert: Mittwoch 7. Februar 2018, 21:47

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
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
snoopy48
User
Beiträge: 14
Registriert: Mittwoch 7. Februar 2018, 21:47

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.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@snoopy48: vergleich mal, was der Inhalt von »letters['1']« und »letters['2']« ist und was da der entscheidende Unterschied ist.
snoopy48
User
Beiträge: 14
Registriert: Mittwoch 7. Februar 2018, 21:47

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']}
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Antworten