关于语法:在python中,-1是什么意思?

What does :-1 mean in python?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
The Python Slice Notation

我正在尝试将一些python代码移植到c,但我遇到了这一行,我无法理解它的含义:

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

我知道,如果‘message’以’开头,那么需要添加一些内容。然而,我似乎不知道它应该被附加在哪里。我完全不知道:-1是什么意思。我做了几次谷歌搜索没有结果。

有人能解释一下这是怎么回事吗?


它是列表索引,返回除最后一个元素-1外的所有元素[:]。这里也有类似的问题

例如,

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

它是这样工作的

a[start:end]

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

a[start:]

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

a[:end]你的情况

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

a[:]

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

它被称为切片,它返回message的所有内容,但最后一个元素除外。

理解这一点的最好方法是举例:

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

您可以用任何数字替换-1

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

不包括最后一个索引。


它叫slicing

返回一个切片对象,该对象表示由范围(开始、停止、步骤)指定的一组索引。-从这个链接:http://docs.python.org/2/library/functions.html slice

您会注意到它类似于范围参数,并且:部分返回整个iterable,所以-1是除最后一个索引之外的所有内容。

以下是切片的一些基本功能:

1
2
3
4
5
6
7
8
9
10
>>> s = 'Hello, World'
>>> s[:-1]
'Hello, Worl'
>>> s[:]
'Hello, World'
>>> s[1:]
'ello, World'
>>> s[5]
','
>>>

遵循这些论点:

1
a[start:stop:step]

1
a[start:stop, i]

要直接回答您的问题:

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

这基本上是检查,如果message开头,如果是这样,它将删除最后一个字符并添加' />'

因此,由于消息是一个XML字符串,它将使元素成为一个空元素,从而关闭自身。


返回message,不带最后一个元素。如果message是字符串,message[:-1]将删除最后一个字符。

请参见教程。