Recherche de l'index de la valeur maximale ou minimale dans une liste à l'aide de max()/min()
Lors de l'utilisation de la fonction intégrée de Python max() et min() pour les algorithmes minimax, il devient nécessaire de récupérer l'index de l'élément max ou min renvoyé. Cela permet d'identifier le mouvement spécifique qui a produit la valeur souhaitée.
Code original :
<code class="python">for i in range(9): new_board = current_board.new_board_with_move([i / 3, i % 3], player) if new_board: temp = min_max(new_board, depth + 1, not is_min_level) values.append(temp) if is_min_level: return min(values) else: return max(values)</code>
Solution :
Pour obtenir l'indice de la valeur min ou max, utilisez l'approche suivante :
<code class="python">import functools index_min = min(range(len(values)), key=functools.cmp_to_key(lambda x, y: values[x] - values[y]))</code>
Alternativement, si l'utilisation de NumPy est réalisable :
<code class="python">import numpy as np index_min = np.argmin(values)</code>
Résultats de référence :
Les résultats de référence suivants ont été obtenus sur une machine exécutant Python 2.7 :
[Image des résultats de référence comparant la solution Python pure (bleu), la solution NumPy (rouge) et itemgetter() -solution basée sur (noir)]
Conclusion :
La solution recommandée est celle qui ne nécessite pas l'importation de modules supplémentaires ni l'utilisation d'énumérations, car elle offre une vitesse supérieure dans la plupart des cas. Néanmoins, pour les grandes listes, une approche basée sur NumPy peut être optimale.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!