Je mets à jour puis je me réfère au dernier élément ajouté à une liste pour déterminer un résultat, par exemple:
if item_list[-1] != item_list[-2]:
outcome1
Je n'ai pas besoin de faire référence à un autre élément de liste, juste item_list [-1] & [-2]. Y a-t-il une manière plus pythonique de faire cela? Ce code est destiné à on_message utilisant websockets, et la liste_éléments est mise à jour une fois par seconde ou une fois par minute. Tout conseil serait apprécié par ce codeur novice!
2 réponses
Vous pouvez utiliser des astuces comme *rest, x, y = item_list
puis comparer, mais je pense que votre méthode est excellente.
Il est parfois inutile de rechercher une méthode «plus pythonique» pour quelque chose pour lequel vous avez déjà une bonne méthode. J'encourage et j'aime cependant votre tentative de vous améliorer. Continuez!
Et si vous vous interrogez sur l'efficacité, votre méthode est probablement la meilleure qui soit.
Selon votre réflexion dans les commentaires:
Juste pour que vous compreniez à quelle vitesse il est, qui est de l'ordre des nanosecodes et à la même vitesse quelle que soit la longueur, voici un repère:
> py -m timeit -s "a = list(range(10_000))" "a[-1]"
2000000 loops, best of 5: 73.3 nsec per loop
> py -m timeit -s "a = list(range(100_000))" "a[-1]"
5000000 loops, best of 5: 74.5 nsec per loop
> py -m timeit -s "a = list(range(1_000_000))" "a[-1]"
5000000 loops, best of 5: 69.6 nsec per loop
Plus de 10 milliards de recherches par seconde (sur mon ancien ordinateur de 2009) c'est assez rapide je pense ;-)
Les listes Python sont implémentées sous forme de tableaux, donc obtenir un index comme celui-ci est une opération à temps constant. Cela signifie qu'il n'y a pas de réelle inefficacité dans votre code, et je ne vois pas non plus de problèmes de lisibilité. Cela dit, si cette vérification est la seule chose pour laquelle vous avez besoin de la liste, vous pouvez probablement la simplifier pour ne stocker que le dernier élément et un booléen pour savoir si cet élément correspond au précédent. Cependant, pour répondre à votre question spécifique, il n'y a pas d'autre moyen de l'écrire qui soit plus pythonique.
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.