46 votes

Ne range() vraiment créer des listes?

Mon professeur et ce gars-là prétendent que range() crée une liste de valeurs.

"Remarque: La portée de la fonction retourne une liste contenant les numéros de de x à y-1. Par exemple, la gamme(5, 10) renvoie la liste [5, 6, 7, 8, 9]."

Je crois que c'est inexacte, car:

type(range(5, 10))
<class 'range'>

En outre, le seul moyen d'accéder aux entiers créé par range() consiste à parcourir, ce qui m'amène à croire que l'étiquetage de gamme() comme une des listes est incorrect.

104voto

thefourtheye Points 56958

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.

8voto

sshashank124 Points 15905

Il dépend.

En python-2.x, range crée en fait une liste (qui est aussi une séquence) alors qu' xrange crée un xrange de l'objet qui peut être utilisée pour parcourir les valeurs.

D'autre part, en python-3.x, range crée un objet iterable (ou plus précisément, une séquence)

2voto

Sarathsp Points 108

gamme crée une liste si la version de python utilisée est de 2.x . Dans ce scénario plage est à utiliser seulement si ses mentionnés plus d'une fois d'utiliser autrement xrange qui crée un générateur de là, en redusing l'utilisation de la mémoire et parfois le temps comme il est paresseux approche.

xrange n'est pas là en python 3.x plutôt peuplements gamme pour ce xrange est pour python 2.x

reportez-vous à la question Quelle est la différence entre plage et xrange?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X