Recherche rapide de liste
Bonjour,
sous python 2.5, je dois trouver la position d'une liste dans une liste de listes au format homogène (même nombre d'éléments, mêmes types).
Ex.:
dans
Code:
tab=[['359974000073A', 362.0], ['3017800110768F', 362.0], ['T083680094092', 62.0], ['3245390062390', 32.0]]
position de
t=['3017800110768F', 362.0]
renvoie ind=1.
Mon soucis, c'est que je peux avoir 2, 3 et + éléments dans t, que tab peut contenir jusqu'à un million de listes et que je dois répéter l'opération des millions de fois !
Bref, je dois optimiser à tout prix mes codes.
J'ai tenté simplement:
ind=tab.index(t)
mais c'est lent.
Est-ce intéressant de trier tab avant de lancer la recherche (éventuellement dichotomique) ?
J'avais essayé (si len(t)>1):
Code:
1 2 3 4 5
| tab=numpy.array(tab)
inter=set(numpy.argwhere(tab==t[0]).T[0])
for v in range(1,len(t)):
inter=inter.intersection(set(numpy.argwhere(tab==t[v]).T[0]))
ind=inter.pop() |
ça marche, mais c'est encore + lent.
Et tab devient un ndarray de numpy, donc pas de méthode .index.
Qui aurait une solution + rapide?
Merci.