2016-12-07 4 views
0

Ich habe eine Liste von Tupeln, die wie folgtWie finde ich den Index der ersten Instanz einer Liste (in einer Liste), die den gewünschten Wert enthält (in Python)?

list_of_list = [(0,1,2), (0,1), (0,1,3,4), (0,1,2,3,4)] 

I Ich habe eine bestimmte ganze Zahl den Index zum ersten Mal finden wollen aussieht. Ich möchte zum Beispiel das erste Mal, dass 3 existiert, und möchte, dass es den Index 2 zurückgibt. Ich möchte auch, dass es None zurückgibt, wenn es nichts finden kann. Ich habe derzeit den folgenden Code

def find_index_of_solution(list_of_list, value_I_am_searching_for): 
    for idx, list_item in enumerate(list_of_list): 
    if value_I_am_searching_for in list_item: 
     return idx 
    return None 

Gibt es eine bessere Möglichkeit, dies zu tun? Vielen Dank!

+2

Ich persönlich würde Ihre Lösung am besten lesbar und verständlich finden. Es gibt andere Möglichkeiten, dasselbe zu tun, aber selbst wenn sie etwas kürzer sind, scheint dies am einfachsten zu sein. – user108471

Antwort

1

Yours:

%%timeit 
list_of_list = [(0,1,2), (0,1), (0,1,3,4), (0,1,2,3,4)] 


def findIdx(list_of_list, value_I_am_searching_for): 
    for idx, list_item in enumerate(list_of_list): 
     if value_I_am_searching_for in list_item: 
      return idx 
    return None 


findIdx(list_of_list, 3) 


1000000 loops, best of 3: 1.18 µs per loop 

Blue_note suchen:

%%timeit 
list_of_list = [(0,1,2), (0,1), (0,1,3,4), (0,1,2,3,4)] 
my_value = 3 
try: 
    return next(index for index, lst in enumerate(list_of_list) if my_value in lst) 
except StopIteration: 
    return None 

1 loop, best of 3: 2 s per loop 

Ein anderes:

%%timeit 
list_of_list = [(0,1,2), (0,1), (0,1,3,4), (0,1,2,3,4)] 


def findIdx(lst, i): 
    return [l.index(i) if i in l else 'None' for l in lst ] 


findIdx(list_of_list, 3) 

100000 loops, best of 3: 2 µs per loop 

Meine Meinung, bleib bei dem, was du für jetzt hast ..

Edit: ich das verpasst ...

Zum Beispiel möchte ich das erste Mal 3 existiert, finden und wollen es Rückkehr der Index 2.

NVM.

+0

Sie können eine 'break'-Anweisung hinzufügen, direkt nachdem Sie den Index der ersten Instanz von' value_I_am_searching_for' gefunden haben. – jwdasdk

1
try: 
    return next(index for index, lst in enumerate(list_of_list) if my_value in lst) 
except StopIteration: 
    return None 

In den Klammern ist ein Generatorausdruck. next gibt das erste Element zurück. enumerate wird verwendet, um sowohl den Index als auch den Wert eines iterierbaren Objekts zu durchlaufen. Schließlich wird eine Ausnahme unter Verwendung bevorzugt in Python zu Überprüfung, sowohl als Stil und Performance-weise

Verwandte Themen