什么:-1意味着在python中?

时间:2013-01-19 21:46:34

标签: python syntax

  

可能重复:
  The Python Slice Notation

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

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

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

有人会如此善意地解释这是做什么的吗?

5 个答案:

答案 0 :(得分:33)

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

例如,

>>> 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]

答案 1 :(得分:4)

它被称为切片,它返回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"

不包括最后一个索引。

答案 2 :(得分:2)

它被称为slicing

“返回表示由范围(开始,停止,步骤)指定的索引集的切片对象。”
- 从这个链接: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] 

答案 3 :(得分:0)

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

请参阅the tutorial

答案 4 :(得分:0)

直接回答您的案件:

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

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

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