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!

1
Edward James 25 janv. 2021 à 04:56

2 réponses

Meilleure réponse

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 ;-)

2
Bharel 25 janv. 2021 à 03:17

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.

1
Lionel Foxcroft 25 janv. 2021 à 02:01
65878012