Ce qui est “mieux” de l'inverse de la méthode ou de l'inversion de fonction intégrée?
Ce qui est généralement considéré comme plus Pythonic/mieux/rapide à utiliser, la méthode inverse ou l'inversion de la fonction intégrée?
À la fois dans l'action:
_list = list(xrange(4))
print _list
rlist = list(reversed(_list))
print rlist
_list.reverse()
print _list
OriginalL'auteur rectangletangle | 2011-07-24
Vous devez vous connecter pour publier un commentaire.
Dépend si vous voulez inverser la liste sur place (c'est à dire changer la liste) ou pas. Aucune autre différence.
Souvent à l'aide de
reversed
conduit à améliorer le code.OriginalL'auteur Katriel
foo.reverse()
en fait inverse les éléments dans le conteneur.reversed()
ne pas renverser quoi que ce soit, il se contente d'un objet qui peut être utilisé pour effectuer une itération sur le conteneur éléments dans l'ordre inverse. Si c'est ce que vous avez besoin, il est souvent plus rapide que le fait d'inverser les éléments.OriginalL'auteur kindall
Il semble y avoir une grande différence. Je pensais vraiment que c'est l'inverse.
Pourquoi est-à réarranger les valeurs dans une liste de plus rapide que de créer un nouveau à partir d'un itérateur ?
list(reversed(_list))
, même si lelist
constructeur est le code en C, il faut passer par lareverseiterator
's de l'API au lieu de juste en remplaçant les pointeurs dans un virage serré C boucle.Si ils doivent vérifier pour
listreverseiterator
ensuite, ils doivent vérifier pour tout... finalement ça devient assez lourd et ralentit court copies. En outre, la destinée-à-être-courant dereversed
est lorsque vous allez effectuer une itération de toute façon et n'ont pas besoin de créer un temporaire.Si vous faites quelque chose avec les listes, les changements d'image. En comparant
for i in reversed(_list):...
et_list.reverse();for i in _list:...
, le ex est un peu plus rapide.OriginalL'auteur Niklas R
Sans le savoir réel des statistiques sur les performances,
_list.reverse()
modifie la liste elle-même, tandis quereversed(_list)
retourne un itérateur prêt pour parcourir la liste dans l'ordre inverse. C'est une grande différence elle-même.Si ce n'est pas un problème,
object.reverse()
semble plus lisible pour moi, mais peut-être que vous avez des exigences en matière de vitesse. Et sireverse()
n'appartient pas à 80% des logiciels qui consomment des ressources, je ne serais pas la peine (en règle générale).reversed
ne copie pas, il retourne un itérateur.vous avez raison. J'ai corrigé 🙂
OriginalL'auteur elitalon