2017-03-03 3 views
-2

Ich muss den Index in einem 2D-Array finden, wo die Zahl entweder größer als die Zahlen nach links und rechts und weniger als die Zahlen über und unter oder umgekehrt ist.Suchen von Indizes in 2D-Liste mit Bedingungen

Ich weiß, ich brauche zwei für Schleifen eins für Spalten eins für Zeilen, ich habe die Nummer x und ich muss es mit den Zahlen im 2d-Array vergleichen, um die Indizes zu finden.

list = [[1,4,6,7,8], 
     [2,4,6,7,8], 
     [1,4,6,7,8], 
     [1,4,6,7,8], 
     [2,4,6,7,8], 
     [6,4,6,7,8]] 

Wenn ich 4 als gegeben bin x I die Indizes in der 2D-Liste finden müssen, wo nach links, rechts, oben und unten oder umgekehrt die anderen Zahlen sind größer oder kleiner als 4. Kann bitte jemand eine Lösung

list = [[1, 4, 6, 7, 8], 
     [2, 4, 6, 7, 8], 
     [1, 4, 6, 7, 8], 
     [1, 4, 6, 7, 8], 
     [2, 4, 6, 7, 8], 
     [6, 4, 6, 7, 8]] 

x = [x for x in list if 4 in x][0] 
print('The index is (%d,%d)' % (list.index(x), x.index(4))) 

dass bieten Mit versuchen, es wird mir nur den ersten Index geben, aber ich brauche das gesamte Array zu prüfen und nutzen eine if-Anweisung als Problem für die mehr als weniger zu überprüfen.

+5

Kein Hausaufgaben-Service, treffen Sie uns auf halbem Weg mit einer versuchten Lösung. – ospahiu

+0

Versuch zur Frage hinzugefügt – mcfellows

Antwort

0

Wird dies tun ...

x = int(input('Enter x: ')) 
data = [[1, 4, 6, 7, 8], 
     [2, 4, 6, 7, 8], 
     [1, 4, 6, 7, 8], 
     [1, 4, 6, 7, 8], 
     [2, 4, 6, 7, 8], 
     [6, 4, 6, 7, 8]] 

dataTranspose = list(zip(*data)) 

for each_row_number in range(0, len(data)): 

    tempRow = list(enumerate(data[each_row_number])) 
    maxIndex, maxVal = max(tempRow, key=lambda eachPair: eachPair[1]) 
    minIndex, minVal = min(tempRow, key=lambda eachPair: eachPair[1]) 

    if x == maxVal: 
     if x == min(dataTranspose[maxIndex]): 
      print(' found another at: (' + str(each_row_number) + ', ' + str(maxIndex) + ')') 
    elif x == minVal: 
     if x == max(dataTranspose[minIndex]): 
      print(' found another at: (' + str(each_row_number) + ', ' + str(minIndex) + ')') 

Beispiel laufen:

Enter x: 8 
found another at: (0, 4) 
found another at: (1, 4) 
found another at: (2, 4) 
found another at: (3, 4) 
found another at: (4, 4) 
found another at: (5, 4) 

Beispiel laufen:

Enter x: 4 
found another at: (5, 1) 

Beispiel laufen:

Enter x: 6 

(Kein Ergebnis in diesem 3. Beispiel wie für x = 6, irgendeine der gegebenen Bedingungen genügt nirgends in der 2-d-Liste).

+0

Vielen Dank tkhurana96, die aussieht, um ziemlich genau das zu sein, was ich suche – mcfellows

+0

@mcfellows groß, wenn es für Sie hilfreich war – tkhurana96

Verwandte Themen