Recherche en 2D liste à l'aide de python pour trouver x,position y
J'ai 2D liste et j'ai besoin de rechercher l'index d'un élément. Comme je suis begineer à la programmation, j'ai utilisé la fonction suivante:
def in_list(c):
for i in xrange(0,no_classes):
if c in classes[i]:
return i;
return -1
Ici des classes est un 2D liste et no_classes indique le nombre de cours que j'ai.e le 1er dimesntion de la liste. -1 est renvoyé lorsque c n'est pas dans le araray. Est-il je peux optimiser la recherche?
- vous pouvez l'optimiser si vous allez utiliser une structure de données, comme jeu, ou si vous triez vos listes à l'avance, sinon il O(N^2) algorithme et vous ne pouvez pas faire plus vite
- Parc: pouvez-vous nous donner quelques indications sur l'optimisation de cela?
- avez-vous des doublons dans vos listes? n'commande de l'élément de questions?
- pas de doublons...et de l'ordre vraiment n'importe pas
- C'est une bonne question, mais je pense qu'il serait mieux dans la révision du code de la pile d'échange.
InformationsquelleAutor ranger | 2013-08-04
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin de définir
no_classes
vous-même. Utilisationenumerate()
:si l'ordre n'a pas d'importance et vous n'avez pas de doublons dans vos données, je vous suggère de vous tourner 2D liste dans liste de jeux:
Après cela, l'original de votre fonction sera de travailler plus vite, parce que la recherche de l'élément dans un ensemble est constante (alors que la recherche de l'élément de la liste est linéaire), de sorte que vous algorithme devient O(N) et pas de O(N^2).
Notez que vous ne devez pas le faire dans votre fonction ou il serait converti à chaque fois que la fonction est appelée.
Utiliser la liste.index(item)
Return the index in the list of the first item whose value is x. It is an error if there is no such item.
docs.python.org/2/tutorial/datastructures.htmlSi votre "2D" de la liste est de forme rectangulaire (même nombre de colonnes pour chaque ligne), vous devez le convertir en un
numpy.ndarray
et utiliser numpy fonctionnalités pour faire de la recherche:i
etj
doit contenir la ligne et de la colonne indices, respectivement.Exemple: