23

可能的重复:
Python 切片表示法

我正在尝试将一些 Python 代码移植到 C,但我遇到了这一行,但我无法弄清楚它的含义:

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

我知道如果 'message以 then 开头,<stream:stream则需要附加一些内容。但是我似乎无法弄清楚它应该附加在哪里。我完全不知道是什么:-1指示。我做了几次谷歌搜索,没有结果。

有人能解释一下这是做什么的吗?

4

5 回答 5

59

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

例如,

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

它像这样工作

a[start:end]

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

a[start:]

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

a[:end]
你的情况

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

a[:]

>>> a[:]
[1, 2, 3, 4, 5, 6]
于 2013-01-19T21:48:04.743 回答
7

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

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

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

您可以随时替换-1为任何数字:

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

不包括最后一个索引。

于 2013-01-19T21:49:57.637 回答
3

它被称为slicing

“返回一个切片对象,表示由 range(start, stop, step) 指定的索引集。”
- 从这个链接:http ://docs.python.org/2/library/functions.html#slice

您会注意到它类似于范围参数,并且该:部分返回整个可迭代对象,因此-1除了最后一个索引之外的所有内容。

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

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

遵循这些论点:

a[start:stop:step]

或者

a[start:stop, i] 
于 2013-01-19T21:47:57.607 回答
0

它返回message没有最后一个元素。如果message是字符串,则message[:-1]删除最后一个字符。

请参阅教程

于 2013-01-19T21:48:07.580 回答
0

直接回答您的情况:

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

这基本上检查是否message以 开头<stream:stream,如果是这种情况,它将删除最后一个字符并添加 a ' />'

因此,由于您的消息是一个 XML 字符串,它将使元素成为一个空元素,并自行关闭。

于 2013-01-19T21:58:13.100 回答