web-dev-qa-db-fra.com

Que signifie: -1 en python?

Dupliquer possible:
La notation de tranche Python

J'essaie de porter du code Python en C, mais je suis tombé sur cette ligne et je ne comprends pas ce que cela signifie

if message.startswith('<stream:stream'):
    message = message[:-1] + ' />'

Je comprends que si 'message commence par <stream:stream, il faut ajouter quelque chose. Cependant, je n'arrive pas à comprendre où il devrait être ajouté. Je n'ai absolument aucune idée de ce que :-1 indique. J'ai fait plusieurs recherches sur Google sans résultat.

Quelqu'un serait-il assez aimable pour expliquer ce que cela fait?

13
Swen Kooij

C'est une liste d'indexation, elle renvoie tous les éléments [:] sauf le dernier -1. Question similaire ici

Par exemple, 

>>> a = [1,2,3,4,5,6]
>>> a[:-1]
[1, 2, 3, 4, 5]

Ça marche comme ça 

a[start:end]

>>> a[1:2]
[2]

a[start:]

>>> a[1:]
[2, 3, 4, 5, 6]

a[:end]
Ton cas 

>>> a = [1,2,3,4,5,6]
>>> a[:-1]
[1, 2, 3, 4, 5]

a[:]

>>> a[:]
[1, 2, 3, 4, 5, 6]
31
enginefree

Cela s'appelle le découpage en tranches et renvoie tout ce qui est de message sauf le dernier élément.

Le meilleur moyen de comprendre ceci est avec exemple:

In [1]: [1, 2, 3, 4][:-1]
Out[1]: [1, 2, 3]
In [2]: "Hello"[:-1]
Out[2]: "Hell"

Vous pouvez toujours remplacer -1 par un nombre quelconque:

In [4]: "Hello World"[:2] # Indexes starting from 0
Out[4]: "He"

Le dernier index n'est pas inclus. 

3
user1632861

Ça s'appelle slicing

"Retourne un objet slice représentant l’ensemble des index spécifiés par range (start, stop, step)."
- depuis ce lien: http://docs.python.org/2/library/functions.html#slice

Vous remarquerez qu'il est similaire aux arguments de plage et que la partie : renvoie la totalité de l'itération, de sorte que -1 est tout sauf le dernier index.

Voici quelques fonctionnalités de base du découpage en tranches:

>>> s = 'Hello, World'
>>> s[:-1]
'Hello, Worl'
>>> s[:]
'Hello, World'
>>> s[1:]
'Ello, World'
>>> s[5]
','
>>>

Suit ces arguments:

a[start:stop:step]

Ou

a[start:stop, i] 
2
jackcogdill

Il retourne message sans le dernier élément. Si message est une chaîne, message[:-1] supprime le dernier caractère.

Voir le tutoriel .

0
NPE

Pour répondre directement à votre cas:

if message.startswith('<stream:stream'): message = message[:-1] + ' />'

En gros, cela vérifie si message commence par <stream:stream et, dans ce cas, il lâchera le dernier caractère et ajoutera un ' />' à la place.

Ainsi, comme votre message est une chaîne XML, l'élément sera vide et se fermera.

0
poke