【问题标题】:What does :-1 mean in python? [duplicate]:-1 在 python 中是什么意思? [复制]
【发布时间】:2013-01-03 08:39:18
【问题描述】:

可能重复:
The Python Slice Notation

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

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

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

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

【问题讨论】:

  • @poke:不是重复的问题!如果 OP 知道这个特性被称为 Python Slice Notation,他就不需要问这个问题
  • @GoranJovic 关键是这个问题彻底解释了这个符号。
  • @poke:我的意思是,虽然它们产生了相同的答案,但这两个问题的措辞完全不同。因此,不要重复问题 - 而是具有相同答案的不同问题。注意到关闭投票对话框中的 exact 字样了吗?
  • @GoranJovic。同样的答案,你说?那么为什么要在两个不同的地方拆分答案呢?
  • @GoranJovic 正如你所知,我已经在 meta 上提出了这个问题:meta.stackexchange.com/questions/164397/…

标签: python syntax


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    它是列表索引,它返回所有元素[:],除了最后一个-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]
    

    【讨论】:

      【解决方案3】:

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

      the tutorial

      【讨论】:

      • 如何将其轻松移植到 C 中?
      • @user1663901 将空字节之前的最后一个字符更改为空字节本身:stackoverflow.com/a/1726318/824544s[strlen(s)-1] = 0;
      【解决方案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"
      

      不包括最后一个索引。

      【讨论】:

        【解决方案5】:

        直接回答您的问题:

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

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

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

        【讨论】:

          猜你喜欢
          • 2020-04-11
          • 1970-01-01
          • 2013-03-10
          • 2019-08-21
          • 2015-02-13
          • 2015-10-16
          • 2019-04-15
          • 2020-03-26
          • 2019-12-17
          相关资源
          最近更新 更多