Recherche rapide de liste - Python - Programmation
MarshPosté le 20-04-2009 à 13:45:22
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
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):
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()
Marsh Posté le 20-04-2009 à 13:45:22
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
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):
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()
(cf.: http://forum.hardware.fr/hfr/Progr [...] 2130_1.htm)
ç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.