Python Language Recherche de séquences imbriquées


Exemple

La recherche dans des séquences imbriquées comme une list de tuple nécessite une approche telle que la recherche de clés dans les dict mais nécessite des fonctions personnalisées.

L'index de la séquence la plus externe si la valeur a été trouvée dans la séquence:

def outer_index(nested_sequence, value):
    return next(index for index, inner in enumerate(nested_sequence) 
                      for item in inner 
                      if item == value)

alist_of_tuples = [(4, 5, 6), (3, 1, 'a'), (7, 0, 4.3)]
outer_index(alist_of_tuples, 'a')  # 1
outer_index(alist_of_tuples, 4.3)  # 2

ou l'index de la séquence externe et interne:

def outer_inner_index(nested_sequence, value):
    return next((oindex, iindex) for oindex, inner in enumerate(nested_sequence) 
                                 for iindex, item in enumerate(inner) 
                                 if item == value)

outer_inner_index(alist_of_tuples, 'a') # (1, 2)
alist_of_tuples[1][2]  # 'a'

outer_inner_index(alist_of_tuples, 7)   # (2, 0)
alist_of_tuples[2][0]  # 7

En général ( pas toujours ) utiliser next et une expression de générateur avec des conditions pour trouver la première occurrence de la valeur recherchée est l'approche la plus efficace.