Moin,
ich bin "Wiedereinsteiger" in die Programmierung und will mir Python und Groovy näher ansehen. Dazu wollte ich meinen eigenen Sudokulöser erstellen (auch wenn es den schon x-fach gibt).
Ich bin da recht schnell mit mehrdimensionalen Arrays gescheitert, obwohl in Java und auch Groovy ein sudoku[][] durchaus machbar ist.
Warum werden in Python mehrdimensionale Arrays als suboptimale Lösung angesehen? Mir fehlt eine griffige Erklärung... Danke schon mal.
Warum präferiert Py andere Konstrukte als mehrdim. Arrays?
Und woran genau? Ein "sudoku[][]" geht auch in Python ...MatthiasV hat geschrieben:Ich bin da recht schnell mit mehrdimensionalen Arrays gescheitert
Wo hast du das her?Warum werden in Python mehrdimensionale Arrays als suboptimale Lösung angesehen?
Google genutzt, Seiten aber nicht gespeichert. Bin u. a. auf eine Sudokusolver-Lösung gestoßen von Peter Norvig, sowie andere, und *keine* davon hat ein mehrdim. Array genutzt. Daher meine Vermutung.
Beim Versuch, ein mehrdimensionales Array zu definieren, bin ich zum Schluss dabei angekommen, etwas wie
zu schreiben (die Lösung sollte auch "Hexadokus" usw. lösen können, vgl. Zeitschrift Elektor). Das waren zwar auch die wirklich ersten Übungen, aber ich habe das Gefühl, es ist zu unelegant...
Beim Versuch, ein mehrdimensionales Array zu definieren, bin ich zum Schluss dabei angekommen, etwas wie
Code: Alles auswählen
Zeile=[None]*maxindex
sudoku = [[None] * maxindex] * maxindex
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Code: Alles auswählen
In [2]: maxindex = 9
In [3]: sudoku = [[None for i in xrange(maxindex)] for i in xrange(maxindex)]
In [4]: sudoku
Out[4]:
[[None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None]]
In [5]: sudoku[0][1] = 1
In [6]: sudoku
Out[6]:
[[None, 1, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None],
[None, None, None, None, None, None, None, None, None]]
@MatthiasV: Das Programmierer für ein bestimmtes Problem keine "mehrdimensionalen Arrays" verwenden heisst ja noch nicht zwangsläufig, dass das an der Programmiersprache liegt. Es kann ja auch an den Programmierern und dem zu lösenden Problem liegen.
Ich hab sudokulösen mit "2D-Listen" gemacht: http://www.python-forum.de/post-19685.html#19685
Ich hab sudokulösen mit "2D-Listen" gemacht: http://www.python-forum.de/post-19685.html#19685
Vor allem auch falsch.MatthiasV hat geschrieben:Beim Versuch, ein mehrdimensionales Array zu definieren, bin ich zum Schluss dabei angekommen, etwas wiezu schreiben (die Lösung sollte auch "Hexadokus" usw. lösen können, vgl. Zeitschrift Elektor). Das waren zwar auch die wirklich ersten Übungen, aber ich habe das Gefühl, es ist zu unelegant...Code: Alles auswählen
Zeile=[None]*maxindex sudoku = [[None] * maxindex] * maxindex
Code: Alles auswählen
In [1]: liste = [[0]*2] * 2
In [2]: liste[0][0] = 1
In [3]: print liste
[[1, 0], [1, 0]]
Verpönt sind mehrdimensionale Arrays in Python keineswegs, es gibt bloß keine (array.array ist nur 1D). *SCNR* Es gibt mit numpy.ndarray übrigens durchaus eine leistungsfähige Klasse für mehrdimensionale Arrays.