A de deux choses:
- Essayez
enumerate
- Au lieu de
darr
être un list
, utilisez un dict
et stocker les valeurs dvp
en tant que clés, avec les variables xindex
et pindex
comme valeurs
Voici le code
for xindex, xvalue in enumerate(xarr):
darr = {}
for pindex, pvalue in enumerate(parr):
dvp = math.fabs(xvalue - pvalue)
darr[dvp] = {'xindex': xindex, 'pindex': pindex}
mini = min(darr.keys())
minix = darr[mini]['xindex']
minip = darr[mini]['pindex']
minindex = darr.keys().index(mini)
print "minimum_index> {0}, is the difference of xarr[{1}] and parr[{2}]".format(minindex, minix, minip)
darr.clear()
Explication
La fonction enumerate
vous permet de parcourir sur une liste et de recevoir également l'index de l'élément. C'est une alternative à votre range(100)
. Notez que je n'ai pas la ligne où je reçois la valeur à l'index xpre
, ppre
, c'est parce que la fonction enumerate
me donne à la fois l'index et la valeur sous la forme d'un tuple.
cependant, est que, au lieu de votre darr
étant une telle liste Le changement le plus important:
[130, 18, 42, 37 ...]
Il est maintenant un dictionnaire comme celui-ci:
{
130: {'xindex': 1, 'pindex': 4},
18: {'xindex': 1, 'pindex': 6},
43: {'xindex': 1, 'pindex': 9},
...
}
Alors maintenant, au lieu de Je stocke simplement les valeurs dvp
seul, je stocke également les indices dans x
et p
qui a généré ces valeurs dvp
. Maintenant, si je veux savoir quelque chose, disons, quelles valeurs x
et p
produisent la valeur dvp
de 43? Je fais ceci:
xindex = darr[43]['xindex']
pindex = darr[43]['pindex']
x = xarr[xindex]
p = parr[pindex]
Maintenant x
et p
sont les valeurs en question.
Note Je stockerais personnellement les valeurs qui ont produit un dvp
particulier, et non les indices de ces valeurs. Mais vous avez demandé les indices, alors je vous ai donné cette réponse. Je vais supposer que vous avez une raison de vouloir gérer des indices comme celui-ci, mais en général, vous ne trouvez pas vous-même manipuler des index de cette manière quand vous programmez de manière Pythonienne. C'est une façon très C de faire les choses.
Vous n'avez vraiment pas besoin de travailler avec les index. – habnabit
L'auteur a demandé comment trouver pvap et xvap pour la valeur minimale qu'ils ont trouvée (et son index 'darr' correspondant). Vous devez, en effet, travailler avec les index de ces listes afin de les retrouver. :) – Andrew
merci pour l'explication, aidé beaucoup :) mais 'minindex = darr.index (mini)' renvoie une erreur; l'objet apparemment 'dict' n'a pas d'attribut 'index'' – pjehyun