En Python 2.x, range
renvoie une liste, mais en Python 3.x range
retourne une séquence immuable, de type range
.
Python 2.x:
print type(range(10))
# <type 'list'>
print type(xrange(10))
# <type 'xrange'>
Python 3.x:
print(type(range(10)))
# <class 'range'>
En Python 2.x, si vous voulez obtenir un objet iterable objet, comme en Python 3.x, vous pouvez utiliser xrange
fonction qui retourne une séquence immuable de type xrange
.
L'avantage de l' xrange
sur range
en Python 2.x:
L'avantage de l' xrange()
sur range()
est minime (depuis xrange()
a toujours pour créer les valeurs lors de la demande) sauf dans le cas d'une très grande plage est utilisé sur une mémoire morte de faim de la machine ou lorsque tous les éléments ne sont jamais utilisés (comme lorsque la boucle se termine généralement avec une pause).
Note:
En outre, le seul moyen d'accéder aux entiers créé par range() est d'itérer à travers eux,
Nope. Depuis range
objets en Python 3 sont immuables séquences, ils prennent en charge l'indexation ainsi. Citant le range
fonction de la documentation,
Les plages de mettre en œuvre toutes les communes de la séquence d'opérations, à l'exception de concaténation et de la répétition
...
Gamme d'objets de mettre en œuvre l' collections.abc.Sequence
ABC, et de fournir des fonctionnalités telles que le confinement des tests, des index de l'élément de recherche, de tranchage et de soutien pour les indices.
Par exemple,
print(range(10, 20)[5])
# 15
print(range(10, 20)[2:5])
# range(12, 15)
print(list(range(10, 20)[2:5]))
# [12, 13, 14]
print(list(range(10, 20, 2)))
# [10, 12, 14, 16, 18]
print(18 in range(10, 20))
# True
print(100 in range(10, 20))
# False
Tout cela est possible avec cette immuable range
de la séquence.