Seite 1 von 1
Python - Auflistung aller Kombinationen mit Wiederholung
Verfasst: Donnerstag 25. April 2024, 22:39
von Thomas K.
Hallo,
ich möchte gern alle Kombinationen zu einer 8stelligen Ziffernfolge mit Wiederholungen auflisten, auch z.B. die Ziffernfolge 11579910. Mit dem nachfolgenden Programmcode funktioniert das noch nicht, da die Wiederholungen nicht erfasst werden.
#open the file
text_file = open('/Users/Thomas/Kombinationen.txt','w')
# Python program to print all
# the possible combinations
from itertools import permutations
# Get all combination of [12345678]
# of length 3
comb = permutations([1,2,3,4,5,6,7,8], 8)
for i in comb:
print(i, file=text_file)
Wäre für eine Idee oder Verbesserung des Programmcodes dankbar.
Re: Python - Auflistung aller Kombinationen mit Wiederholung
Verfasst: Freitag 26. April 2024, 05:39
von __deets__
Statt permutations brauchst du product aus itertools.
Re: Python - Auflistung aller Kombinationen mit Wiederholung
Verfasst: Freitag 26. April 2024, 06:54
von Sirius3
Importe stehen ganz am Anfang der Datei.
Dateien öffnet man mit dem with-Statement. Bei Text-Dateien sollte man auch immer das richtige Encoding angeben.
Variablennamen müssen aussagekräftig sein. Bei i denkt man an einen Index, eine einzelne Zahl, nicht an ein Tuple aus 8 Zahlen.
Was hat ein Kamm mit Kombinationen zu tun?
Kommentare sollten erklären, was gemacht wird und nicht das offensichtliche beschreiben. Vor allem sollten Kommentare dem Code wiedersprechen, wie zum Beispiel, alle Kombinationen der Länge 3, wenn Du eigentlich 8 möchtest.
Code: Alles auswählen
from itertools import product
with open('/Users/Thomas/Kombinationen.txt', 'w', encoding="utf8") as output:
combinations = product([1,2,3,4,5,6,7,8], 8)
for combination in combinations:
print(combination, file=output)
Re: Python - Auflistung aller Kombinationen mit Wiederholung
Verfasst: Freitag 26. April 2024, 12:07
von Thomas K.
Vielen Dank an _deets_ und Sirius3
Ich erhalte bei dem Code von Sirius3 folgende Fehlermeldung:
Exception has occurred: TypeError
'int' object is not iterable
combinations = product([1,2,3,4,5,6,7,8],8)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: 'int' object is not iterable
Ich hatte versucht vor "product" noch ein "int" zu setzen, hat aber leider nicht funktioniert.
Was muss ich noch ändern bzw. hinzufügen?
Re: Python - Auflistung aller Kombinationen mit Wiederholung
Verfasst: Freitag 26. April 2024, 12:14
von Sirius3
So schnell geht's wenn man etwas nicht testet:
Re: Python - Auflistung aller Kombinationen mit Wiederholung
Verfasst: Freitag 26. April 2024, 14:38
von Thomas K.
Alles gut, vielen Dank für die schnelle Antwort
Mein Code dagegen war eher der eines Anfängers gewesen und nicht wirklich strukturiert.
Hast du evtl. noch einen Tip, wie man Python noch besser lernen kann?
Re: Python - Auflistung aller Kombinationen mit Wiederholung
Verfasst: Sonntag 28. April 2024, 09:35
von Thomas K.
Kann man die Kombinationen auch aufteilen und in mehreren Dateien speichern? Die erstellte Datei lässt sich leider wegen der Größe nicht öffnen.
Re: Python - Auflistung aller Kombinationen mit Wiederholung
Verfasst: Sonntag 28. April 2024, 10:28
von Sirius3
Was ist überhaupt der Sinn, alle Kombinationen in einer Datei zu speichern? Es ist deutlich effizienter, die Zahlen bei Bedarf zu erzeugen.
Re: Python - Auflistung aller Kombinationen mit Wiederholung
Verfasst: Sonntag 28. April 2024, 11:11
von __blackjack__
@Thomas K.: Na klar kann man das auch aufteilen in mehrere Dateien. Warum sollte man das nicht können?
Re: Python - Auflistung aller Kombinationen mit Wiederholung
Verfasst: Sonntag 28. April 2024, 11:42
von nezzcarth
Du kannst die Teilung entweder gleich beim Erzeugen vornehmen oder nachträglich, z.B. mit dem Linux/Unix Kommandozeilen-Tool 'split'.
Wobei: Die Datei ist bei mir 401MB (LF) bzw. 416 MB groß (CRLF). Das kann ein geeigneter Editor auf einem handelsüblichen Rechner problemlos öffnen und darstellen. Z.B. Geany oder vim packen das bei mir problemlos und mit so etwas wie 'less' geht es ja eh "immer".
Re: Python - Auflistung aller Kombinationen mit Wiederholung
Verfasst: Sonntag 28. April 2024, 12:52
von grubenfox
oder mit Kate... dauert vielleicht einen mehr oder weniger kleinen Moment beim öffnen/einlesen, aber passt...
Re: Python - Auflistung aller Kombinationen mit Wiederholung
Verfasst: Sonntag 28. April 2024, 14:04
von __blackjack__
Die Datei(en) werden auch kleiner wenn man nicht die Liste einfach ausgibt, sondern wie im ersten Beitrag die Ziffernfolge pro Zeile speichert. Also ohne Klammern, Kommas, und Leerzeichen.
Code: Alles auswählen
#!/usr/bin/env python3
from itertools import product
from more_itertools import ichunked
def main():
for i, rows in enumerate(
ichunked(product([1, 2, 3, 4, 5, 6, 7, 8], repeat=8), 0x400000)
):
with open(f"test{i:02d}.txt", "w", encoding="ASCII") as file:
file.writelines("".join(map(str, row)) + "\n" for row in rows)
if __name__ == "__main__":
main()
Sind dann 36 MiB pro Datei, wenn man das auf vier Dateien aufteilt:
Code: Alles auswählen
$ ls -lh test0?.txt
-rw-rw-r-- 1 bj bj 36M Apr 28 14:21 test00.txt
-rw-rw-r-- 1 bj bj 36M Apr 28 14:21 test01.txt
-rw-rw-r-- 1 bj bj 36M Apr 28 14:21 test02.txt
-rw-rw-r-- 1 bj bj 36M Apr 28 14:21 test03.txt
Re: Python - Auflistung aller Kombinationen mit Wiederholung
Verfasst: Dienstag 7. Mai 2024, 13:51
von Thomas K.
Danke an alle für die angegebenen Lösungen