Permutationen bestimmen?

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

Der ganze Witz der Itertools ist es, mit Iteratoren bzw. Generatoren zu arbeiten, d.h. ohne alles erst in eine komplette Liste auszuwalzen. Du sabotierst das aber ziemlich gründlich, weil du doch das Bauen einer gigantischen Liste erzwingst:

kombinationen = list(permutations(zahlen, len(zahlen)))

Also weg damit (und noch ein paar Kleinigkeiten aufgeräumt), und schon passiert ganz von selbst, was du wolltest:

from itertools import permutations

zahlen = list(range(1, 13))
kombinationen = permutations(zahlen, len(zahlen))

with open('kombinationen.txt', 'w') as datei:
    for kombination in kombinationen:
        datei.write(', '.join(str(num) for num in kombination) + '\n')

alexx5678 
Beitragsersteller
 06.11.2023, 14:53

Vielen Dank für die Antwort, hat perfekt funktioniert! Ich habe gerade erst angefangen damit zu arbeiten deswegen entschuldige meine Dummheit :)
eine Frage hätte ich noch: die Datei die dabei entsteht ist zu groß um sie mit Texteditoren zu öffnen, gibt es eine Möglichkeit die Zahlen in mehreren, kleineren Dateien abzuspeichern? Vielen Dank

jo135  06.11.2023, 15:00
@alexx5678

Von Python aus nicht so einfach, weil die Zahl der Zeilen nicht von vornherein bekannt ist. Wenn du auf Linux oder MacOS arbeitest, lass dir die große Datei einfach mit split in kleinere aufteilen. Ich vermute, sowas gibt's auch irgendwo für Windows.

Wobei ich mich ein wenig frage, wofür die Datei im Texteditor öffnest - solche Riesendinger wird man doch eher programmatisch bearbeiten?

alexx5678 
Beitragsersteller
 06.11.2023, 15:12
@jo135

wobei man die Zahl der Zeilen ja vorher mit 12! berechnen könnte, aber das stimmt, eigentlich müsste ich sie nicht öffnen (ich wollte nur mal nachschauen)

jo135  06.11.2023, 15:24
@alexx5678
wobei man die Zahl der Zeilen ja vorher mit 12! berechnen könnte

Stimmt natürlich, ich meinte hier eher, dass man den gegebenen Datenstrukturen keine "Länge" entlocken kann. Man könnte klarerweise eine große Schleife drumherum legen und damit einzelne Dateien numeriert anlegen. Ich find's aber trotzdem einfacher, nötigenfalls nachher einen Einzeiler mit "split" zu machen.

Fürs "Nachschauen" tut es üblicherweise cat / more / less oder solche Tools.