2017-08-19 1 views
0

Ich habe eine Liste der Liste und ich muss den Index dieses Elements in ihm erhalten.Suche Index des Elements in der Liste der Liste

Angenommen, ich habe eine Liste [[0,0,0,'P'],[0,0,0,0],[0,'Q',0,0],[0,0,0,0]].

Wie kann ich den Index 'P' und 'Q' bekommen, wenn es nur eine 'P' und eine 'Q' gibt?

Ich habe versucht: list.index('P'),

bekam aber ValueError: 'P' is not in list

Antwort

1

Sie Liste Verständnis verwenden können und enumerate bei jeder Iteration:

l = [[0,0,0,'P'],[0,0,0,0],[0,'Q',0,0],[0,0,0,0]] 

indexes = [[i for i, a in enumerate(b) if a == "P" or a == "Q"] for b in l] 

Sie können auch ein Wörterbuch verwenden, die den Buchstaben speichert und ein entsprechende Liste mit dem Unterlistenindex und dem Buchstabenindex in der Unterliste:

new_dict = [{a:[i, b] for b, a in enumerate(c) if a == "P" or a == "Q"} for i, c in enumerate(l)] 

new_dict = [i for i in new_dict if i] 

final_dict = {**new_dict[0], **new_dict[1]} 
print(final_dict) 

Ausgang:

{'Q': [2, 1], 'P': [0, 3]} 

schließlich die kompletten Sublisten zu erhalten:

final_values = final_dict.values() 

Ausgang:

[[2, 1], [0, 3]] 
+1

Wenn Sie '" P "' und '" Q "' in eine Menge vor dem Listenverständnis einfügen, 'wenn a ==" P "oder a ==" Q "' zu 'if a in P_Q_set verkürzt werden könnte ' –

+0

' print (indexes) 'gibt' [[3], [], [1], []] 'als Ausgabe, wie kann ich es in' [2, 1] & [0, 3] 'formatieren ? – kesoh

+0

@kesoh Bitte lesen Sie meine letzte Änderung. – Ajax1234

0

Wenn Sie den Index, an dem suchen, das Element in der ist Unterliste, können Sie dies versuchen:

input_list = [[0,0,0,'P'],[0,0,0,0],[0,'Q',0,0],[0,0,0,0]] 

def find_position(input_list, element): 
    index = 0 
    for sublist in input_list: 
     if element in sublist: 
      return index 
     index += 1 
    return None 

find_position(input_list, 'P') 
OUT: 0 

find_position(input_list, 'Q') 
OUT: 2 
0

Hier sind die Elemente Ihres Sucharrays selbst Arrays, also müssen Sie etwas arbeiten, um zu bekommen, was Sie wollen.

Ich nehme an, dass bei der Suche nach 'P' und 'Q' ein Tupel als Ergebnis erwartet wird, wobei der erste Wert auf das Array verweist, in dem das Suchelement erscheint und der zweite Wert auf den Index von das Suchelement in dem Array, in dem es angezeigt wird.

können Sie schreiben die folgende Funktion

def find_position(array, elem): 
    for i, arr in enumerate(array): 
     if elem in arr: 
      return (i, arr.index(elem)) 
    return (-1, -1) # elem do not exist 


find_position(l, 'Q') 
Out: (2, 1) 

find_position(l, 'P') 
Out (0, 3) 
0

Sie haben in verschachtelten Listen suchen:

for nested_list in list: 
    if 'P' in nested_list: 
     index_of_P = nested_list.index('P') 
     break 

Die Erklärung:

index() Methode löst das ValueError wenn 'P' wurde nicht gefunden in nested_list, daher der if Test kurz vor seiner Verwendung.

Wie Sie nur eine 'P', break die for Schleife nach der erfolgreichen Suche haben.


Hinweis:

Dies ist eine einfache, aber nicht Verwendung empfohlen. Nach dem Lernen über die Ausnahmen Handhabung werden Sie mehr geeignete Lösung zu sehen.

+0

Wenn P nicht vorhanden ist - warum sollte nicht einfach die Ausnahme behandelt werden? Wenn Sie zuerst nachsehen, müssen Sie die Liste zuerst scannen und dann erneut scannen, um die Position zu finden ... Wenn Sie die Ausnahme abfangen, haben Sie bewiesen, dass sie nicht vorhanden ist. Wenn ja, hat Ihr Index nur so weit gescannt muss gehen und Sie haben den Index. Keine Notwendigkeit, mehr Arbeit als nötig zu tun. –

+0

@ JonClements du bist definitiv richtig, aber ich habe beschlossen, meine Antwort auf die OP (angenommene) Ebene anzupassen und verwendet seine Voraussetzung für die einzelne Existenz von "P". – MarianD

+0

Fair genug - obwohl auf dieser "Ebene" - sie werden wahrscheinlich den Ratschlag als Evangelium nehmen, dass Sie die Existenz zu überprüfen brauchen, um einen "Fehler" zu vermeiden (es ist kein Fehler - nur eine Ausnahme, die nicht unbedingt schlecht ist Dinge) für den Fall, dass es nicht - was ... tut niemandem wirklich einen Gefallen. –

Verwandte Themen