-1
votes

Index de recherche avec python sans boucle

J'ai une liste en python, par exemple A = [-22, -10,0,3,8] et je souhaite trouver un [x] = x, cela signifie que l'index et le numéro de la liste ont la même valeur. Dans ce cas x = 3 parce qu'un [3] = 3.

Puis-je trouver x sans boucle?

Edit: C'est un problème académique et j'ai un indice "Vous n'avez pas besoin de visiter chaque position dans la matrice" et les numéros seront commandés et uniques


12 commentaires

Y a-t-il une raison pour laquelle vous ne pouvez pas utiliser de boucle?


Oui, vous pouvez utiliser la récursive. Cela sera moins efficace et moins maladroit que d'utiliser une boucle, alors je suppose que vous demandez de la curiosité académique.


Oui, c'est un problème académique et j'ai une idée "Vous n'avez pas besoin de visiter chaque poste dans le tableau"


Mais A [1] = 1, A [2] = 2, A [3] = 3, vous devez vous boucler d'une manière ou d'une autre.


L'utilisation d'une boucle ne signifie pas que vous devez visiter chaque position ... vous vous arrêteriez après le premier match.


Bonjour, quand j'ai écrit l'exemple que je ne pensais pas. J'avais corrigé le tableau et il y a une seule solution .. Et oui, vous pouvez arrêter la boucle ..


Toute option que vous utilisez va utiliser une boucle de quelque sorte à l'arrière-plan. Quel est le point d'éviter une boucle?


Ce que vous cherchez est un point fixe. et s'il n'y a pas de règle sur la manière dont votre liste a été construite (une fonction? aléatoire?) Il n'y a probablement aucun moyen d'être plus efficace que de simplement boucler ... Si les entrées de la liste sont une sorte de valeurs de fonction là-bas. être de meilleurs moyens.


Les deux exemples que vous avez donnés (pré et post-édition) étaient des listes croissantes monotone ... était-ce juste par coïncidence ou que cette partie de la déclaration de problème?


@cwbusacker: pas vrai. Une fonction récursive (1) ne nécessite pas de boucle et (2) non (nécessairement) "visiter chaque position".


Vous avez raison, mais la récursivité n'est pas meilleure qu'une boucle. Oui, vous pouvez faire boucle jusqu'à ce que vous trouviez le premier, mais cela dépend de ce que c'est pour.


@Yunaa. Ce n'est pas une coïncidence que vous aurez le numéro commandé et unique


5 Réponses :


1
votes

Vous pouvez utiliser une compréhension de la liste (mais cela vient de cacher la boucle):

Cela vous donnera tous les index où un [i] == i: p> xxx pré>

Si vous voulez seulement le premier, vous pouvez utiliser la fonction suivante: P>

index = next((i for i,a in enumerate(A) if i==a),None) # 1


0 commentaires

0
votes

Ceci obtient Python pour faire la boucle pour vous:

list(map(lambda x: x[0], filter(lambda x: x[0] == x[1], enumerate([-2,1,2,3,8]))))
# [1, 2, 3]


0 commentaires

2
votes

Étant donné que les éléments de liste sont des entiers, dans l'ordre et distincts, le problème peut être résolu par Recherche binaire . En effet, la séquence A [i] - i n'est pas diminuée. Une recherche binaire ne se rend pas sur la position "chacune" dans la matrice; Seulement O (log n) d'entre eux.


0 commentaires

0
votes

Utiliser index code>?

>>> [-22,-10,0,3,8].index(3)
3


0 commentaires

0
votes

juste pour Lulz, la fonction récursive: xxx


0 commentaires