2017-07-04 1 views
3

Pourquoi les codes [range(10)] et list(range(10)) sont-ils différents dans Python 3?Pourquoi [range (10)] et list (range (10)) sont-ils différents?

sortie est la suivante:

>>> print([range(10)]) 
[range(0, 10)] 
>>> print(list(range(10))) 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
+0

Je sais que cela a été demandé, mais je ne trouve pas dupe cible. Google n'indique rien de pertinent. – user2357112

+0

@JanHudec Merci d'avoir répondu, mais pouvez-vous développer davantage ce que vous entendez par là? – Seoul

+0

@ user2357112 Oui, j'ai essayé de le chercher aussi et j'ai juste décidé de demander même si je descendais des votes, car il vaut mieux apprendre que de s'inquiéter des points – Seoul

Répondre

11

the docs Citant, "Les listes peuvent être construites de plusieurs façons":

[range(10)] 

construit une liste de 1 point, le range object. En général, une liste d'éléments séparés par des virgules entre crochets construit une liste desdits éléments.

list(range(10)) 

passe le range object comme argument à la list constructor:

class list([iterable])

Le constructeur construit une liste dont les éléments sont les mêmes et dans le même ordre que articles de itérables . itérable peut être une séquence, un conteneur qui prend en charge l'itération ou un objet itérateur. Si itérable est déjà une liste, une copie est faite et retournée, similaire à iterable[:]. Par exemple, list('abc') renvoie ['a', 'b', 'c'] et list((1, 2, 3)) renvoie [1, 2, 3]. Si aucun argument n'est donné, le constructeur crée une nouvelle liste vide, [].

Une plage dans Python 3 represents an immutable sequence of numbers, donc dans votre cas, la liste résultante est une liste de nombres de la plage.

5

[x] signifie "faire une liste dont un élément est x". Signifie «faire une liste dont les éléments sont les éléments dex».

range(10) retourne un objet qui imprime comme range(0, 10) (car il affiche la valeur de départ lors de l'impression) et dont les éléments sont les entiers de 0 à 9, de sorte que [range(10)] donne la liste d'un élément [range(0, 10)] et list(range(10)) donne le 10-élément liste [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].

1

Dans votre premier exemple, vous créez simplement un objet liste à l'aide de la notation entre crochets et vous y placez un objet range(). D'autre part, dans votre deuxième exemple, vous utilisez le list() intégré à convertir l'objet range() à une liste. La différence est que l'utilisation de [] crée simplement une liste. Par contre, il ne fait rien pour le contenu. Par contre, list() renverra une liste vide si vous ne transmettez rien ou tentera de convertir ce que vous avez passé en objet liste.

The documentation for list() notes this:

Le constructeur crée une liste dont les éléments sont les mêmes et dans le même ordre que les articles de itératives. iterable peut être une séquence, un conteneur qui prend en charge l'itération ou un objet itérateur. Si iterable est déjà une liste, une copie est faite et retournée, similaire à iterable [:]. Par exemple, list ('abc') renvoie ['a', 'b', 'c'] et list ((1, 2, 3)) renvoie [1, 2, 3]. Si aucun argument n'est donné, le constructeur crée une nouvelle liste vide, [].

-1

fonction range() 3.x python est similaire à la fonction xrange() en python 2.x.In python 2.x range() produit une liste de recherche, et retourne un itérateur xrange() - un objet de séquence

Dans python 2.x

>>> range(1) 
[0] 
>>> type(range(1)) 
<type 'list'> 

3.x python

>>> range(1) 
range(0, 1) 
>>> type(range(1)) 
<class 'range'> 

Et pour obtenir une liste, vous pouvez passer le générateur list()

>>> print (list(range(10))) 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

Pour référence plus, lisez here