8
votes

Comment la recherche dans Python fonctionne-t-elle?

Pour faire clairement ma question dire si j'ai un tableau A comme Sortir [123]: [1, 3, 4, 6, 9, 10, 54] Lorsque j'essaie de rechercher les numéros dans la liste, la recherche retourne la valeur correcte, mais lorsque j'essaie quelque chose dans la liste, il renvoie une valeur absurde

Voici quelques-uns des résultats P>

In [131]: a
Out[131]: [1, 3, 4, 6, 9, 10, 54]

In [132]: searchsorted(a,1)
Out[132]: 0

In [133]: searchsorted(a,6)
Out[133]: 3

In [134]: searchsorted(a,[9,54,1])
Out[134]: array([4, 6, 0])

In [135]: searchsorted(a,[9,54,1,0])
Out[135]: array([4, 6, 0, 0])
***> # here 0 is not in the list, but turns up @ position 0***

In [136]: searchsorted(a,740)
Out[136]: 7
***> # here 0 is not in the list, but turns up @ position 7***


3 commentaires

Qu'est-ce que recherche: ?


SearchSorted n'est clairement pas une intégrée.


@Volatiality recherche: est une fonction numpue / scipe. docs.cipy.org/doc/numpy/reference/generated/ ...


4 Réponses :


1
votes

du Docs Il indique qu'il utilise Recherche binaire pour repérer le point d'insertion d'un élément dans une liste triée.

Le mot «point d'insertion» signifie que si l'élément I est inséré à l'index du point d'insertion N dans la matrice triée A, la matrice A restera triée avec un nouvel article i.

Vos exemples tels que [9, 54, 1] est sans signification car le tableau n'est pas trié.

Vous pouvez utiliser le module bisect en python pour faire la même chose, sans engourdissement.


2 commentaires

[9,54,1] n'est pas la liste à rechercher, c'est une liste d'éléments pour renvoyer les points d'insertion dans A car. Cela fonctionne bien, voyez la sortie de celui-ci.


@paxdiablo ouais, je n'ai pas vu ça



12
votes

recherche: vous indique l'élément appartient à la commande de garantie:

Recherchez les indices dans une matrice triée A tel que, si les éléments correspondants de V ont été insérés avant les indices, l'ordre d'A serait préservé.

insertion 740 en position 7 conserverait la commande, comme l'insérerait 0 à la position 0.


3 commentaires

Si vous souhaitez déterminer si un numéro est dans un tableau, vous pouvez utiliser == et non nul pour faire ceci: len ((A == 740) [ 0]) est zéro.


Merci @jozzas l'a eu. Je pensais que cela effectue une recherche binaire.


Ou vous pouvez faire 740 == A [RECHERCHED (A, 740)]] , pour utiliser toujours la recherche binaire.




0
votes

1 commentaires

Veuillez formater l'échantillon de code et inclure le résultat sous forme de texte dans votre réponse. Si IMGUR arrête l'hébergement de l'image à l'avenir, les lecteurs perdront l'accès à une partie importante de votre réponse.