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.
Python - Auflistung aller Kombinationen mit Wiederholung
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.
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)
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?
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?
So schnell geht's wenn man etwas nicht testet:
Code: Alles auswählen
product([1,2,3,4,5,6,7,8], repeat=8)
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Thomas K.: Na klar kann man das auch aufteilen in mehrere Dateien. Warum sollte man das nicht können?
“I am Dyslexic of Borg, Your Ass will be Laminated” — unknown
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".
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".
oder mit Kate... dauert vielleicht einen mehr oder weniger kleinen Moment beim öffnen/einlesen, aber passt...
_______________________________________________________________________________
https://www.python-kurs.eu/index.php
https://learnxinyminutes.com/docs/python/ https://learnxinyminutes.com/docs/de-de/python-de/
https://quickref.me/python https://docs.python-guide.org/
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
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.
Sind dann 36 MiB pro Datei, wenn man das auf vier Dateien aufteilt:
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()
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
“I am Dyslexic of Borg, Your Ass will be Laminated” — unknown