2011-04-28 2 views
1

à l'interprète,Python a = a.reverse rend la liste vide?

a = [1,2,3,4] 
a = a.reverse() 

Suivant lorsque je tape un à l'interprète, je reçois rien. Il semble donc que a = a.reverse() génère une liste vide. Est-ce par conception? J'utilise python 2.5 sur Windows XP.

+2

Documentation ici: http://docs.python.org/tutorial/datastructures.html#more-on-lists et ici: http://docs.python.org/library/stdtypes.html#mutable -sequence-types –

Répondre

16

list.reverse() modifie la liste sur place, renvoie None. Mais si vous voulez protéger l'ancienne liste, vous pouvez utiliser la fonction reverse() pour cela, elle renvoie un itérateur.

In [1]: a=[1,2,3,4] 

In [2]: print(a.reverse()) 
None 

In [3]: a 
Out[3]: [4, 3, 2, 1] 

In [4]: a=[1,2,3,4] 

In [5]: print(reversed(a)) 
<listreverseiterator object at 0x24e7e50> 

In [6]: list(reversed(a)) 
Out[6]: [4, 3, 2, 1] 

In [7]: a 
Out[7]: [1, 2, 3, 4] 
1

list est un type mutable. Par conséquent, les opérations list sont en place et renvoient None.

4

reverse modifie la liste sur place et ne renvoie rien. Ainsi, c'est l'utilisation prévue:

a = [1, 2, 3, 4] 
a.reverse() 
a  # => [4, 3, 2, 1] 

Si vous attribuez le résultat de reverse retour à a, vous écraserez tout son travail avec la valeur de retour de sens (None), qui est l'endroit où votre bug provient.

1

La méthode intégrée reverse d'une liste sur python ne retourne pas la liste inversée.

Inverse la liste en place.

Donc, si vous voulez revenir sur votre liste, comme dans votre code, il suffit de faire:

a = [1,2,3,4] 
a.reverse() 
0

Je pense que ce que vous voulez faire est:

a = [1,2,3,4] 
a.reverse() 

a est un objet et les opérations fonctionnent sur ses données, vous n'avez donc pas besoin de l'assigner de nouveau.

0

La méthode inverse fait l'inverse 'en place' (comme le tri) et retourne Aucun, donc après l'appel a.reverse()a contient déjà le résultat.

0

list.reverse() ne renvoie rien, car il change la liste en place. Voir cet exemple:

>>> a = [1,2,3,4] 
>>> a.reverse() 
>>> a 
[4, 3, 2, 1] 

Il y a aussi la fonction reversed (en fait un type, mais n'a pas d'importance ici), qui ne change pas la liste en place, mais retourne à la place un itérateur avec les éléments de liste dans l'ordre inverse. Essayez:

>>> a = [1,2,3,4] 
>>> a = list(reversed(a)) 
>>> a 
[4, 3, 2, 1] 
Questions connexes