Ermitteln der Nachbarn der zweidimensionalen Zellenliste

8

Ich habe eine Liste von Listen, etwas wie

[[1, 2, 3,],[4, 5, 6,],[7, 8, 9]] .

Grafisch dargestellt als:

%Vor%

Ich suche nach einem eleganten Ansatz, um den Wert von Nachbarn einer Zelle horizontal, vertikal und diagonal zu überprüfen. Zum Beispiel sind die Nachbarn von [0] [2] [0] [1], [1] [1] und [1] [2] oder die Zahlen 2, 5, 6.

Jetzt merke ich, ich könnte einfach einen Bruteforce-Angriff machen und jeden Wert überprüfen:

%Vor%

Aber das ist einfach, und ich dachte mir, ich könnte mehr lernen, wenn ich einige elegantere Ansätze sehe.

    
Dominic Bou-Samra 25.10.2009, 13:36
quelle

11 Antworten

16
%Vor%

Ich weiß nicht, ob das als sauber angesehen wird, aber dieses One-Liner gibt Ihnen alle Nachbarn, indem es über sie iteriert und Randfälle verwerfen.

    
truppo 25.10.2009, 15:03
quelle
8

mb ...

%Vor%     
johniek_comp 15.05.2012 18:27
quelle
5

Angenommen, Sie haben eine quadratische Matrix:

%Vor%

itertools.product und dank Pythons der Ausdruck und Stern-Operator , die Funktion ist ziemlich trocken aber immer noch lesbar genug .

Bei einer Matrixgröße von 3 können Sie dann (falls erforderlich) die Nachbarn in einem list :

sammeln %Vor%

Was die Funktion macht, kann wie folgt visualisiert werden:

    
etuardu 18.12.2015 19:00
quelle
3
%Vor%     
John La Rooy 25.10.2009 14:25
quelle
2

Es gibt keinen saubereren Weg, dies zu tun. Wenn Sie wirklich wollen, könnten Sie eine Funktion erstellen:

%Vor%     
Georg Schölly 25.10.2009 14:08
quelle
1

Hier ist Ihre Liste:

%Vor%

Also sind die horizontalen Nachbarn von (x, y) (x +/- 1, y).

Die vertikalen Nachbarn sind (x, y +/- 1).

Diagonale Nachbarn sind (x +/- 1, y +/- 1).

Diese Regeln gelten für eine unendliche Matrix. Um sicherzustellen, dass die Nachbarn in eine endliche Matrix passen, muss, wenn der Anfang (x, y) am Rand ist, nur eine weitere Einschränkung auf die Koordinaten von Nachbarn angewendet werden - die Matrixgröße.

    
JS_is_bad 25.10.2009 13:44
quelle
0
%Vor%

Ich weiß nicht, wie elegant es Ihnen scheint, aber es scheint ohne jede Hard-Codierung zu funktionieren.

    
SilentGhost 25.10.2009 14:17
quelle
0

Dies erzeugt alle Indizes:

%Vor%     
Jochen Ritzel 25.10.2009 14:28
quelle
0

Vielleicht überprüfen Sie eine Sudoku-Box. Wenn die Box n x n ist und die aktuelle Zelle (x, y) beginnt, prüft sie:

%Vor%     
tester 25.10.2009 14:33
quelle
0

Wenn jemand neugierig ist auf alternative Möglichkeiten, direkte (nicht-diagonale) Nachbarn auszuwählen, gehen Sie hier:

%Vor%     
Corvin 02.07.2016 07:05
quelle
0

Danke @JS_is_bad für einen tollen Hinweis über die Nachbarn. Hier ist der laufende Code für dieses Problem

%Vor%     
Kranti 23.03.2018 07:27
quelle

Tags und Links