【问题标题】:What does list[x::y] do? [duplicate]list[x::y] 有什么作用? [复制]
【发布时间】:2012-02-20 02:55:04
【问题描述】:

可能重复:
Good Primer for Python Slice Notation

我最近一直在阅读一些示例代码,并且我已经阅读了很多网站,但我似乎无法正确地获得查询以给出我正在寻找的答案。如果有人可以帮助我,我将不胜感激。

【问题讨论】:

  • 如果您稍微搜索一下,您会发现很多包含类似问题(和类似答案)的帖子。我认为这个必须关闭

标签: python syntax


【解决方案1】:

它切片

x[startAt:endBefore:skip]

如果您使用skip = 2,则列表中从startAt 开始并以endBefore 结束的所有其他元素都将被选中。 [记住:索引在列表元素之间存在]

要查看此内容,请输入

x = range(100)

在 Python 提示符下。那就试试这些吧

x[::2]
x[::3]
x[10:40:6]

看看会发生什么。

【讨论】:

    【解决方案2】:

    L[x::y] 表示L 的切片,其中x 是开始的索引,y 是步长。以下是您可以在解释器中尝试的一些示例

    >>> L=range(20)
    >>> L
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
    

    如果你想要每个第三个元素

    >>> L[::3]
    [0, 3, 6, 9, 12, 15, 18]
    

    现在每三个元素从 L[1] 开始

    >>> L[1::3]
    [1, 4, 7, 10, 13, 16, 19]
    

    现在每三个元素从 L[2] 开始

    >>> L[2::3]
    [2, 5, 8, 11, 14, 17]
    

    你可以指定一个负步骤来倒退

    >>> L[::-1]
    [19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
    

    您也可以分配给这个切片,但值必须与您要替换的切片具有相同的长度

    >>> L[::3]=[0,0,0,0,0,0,0]
    >>> L
    [0, 1, 2, 0, 4, 5, 0, 7, 8, 0, 10, 11, 0, 13, 14, 0, 16, 17, 0, 19]
    

    最后,您可以像这样删除每个第三个元素

    >>> del L[::3]
    >>> L
    [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19]
    

    【讨论】:

      【解决方案3】:

      这是列表切片的语法。 当你说,

      list[a:b:c],
      

      a 是起始索引,b 是结束索引,c 是可选步长。 这将为您提供一个从索引 a(包括)开始到索引 b(不包括)结束的列表,在 c 的步骤中选择元素。

      例如,

      l = [1,2,3,4,5,6,7]
      

      如果我说 l[2:6:2],这将给我 [3,5]。

      如果您跳过结束索引,就像在您的问题中一样,它将从开始索引 (x) 中获取元素,如果 y 为正数,则选择每个第 y 个元素,直到它到达列表末尾,如果 y 则选择列表的开头是负数。

      例如l[1::-1] = [2,1]

      l[1::2] = [2,4,6]

      默认步长为 1。

      【讨论】:

        【解决方案4】:

        这意味着从x创建一个新列表,直到步骤y结束:

        >>> l = range(10)
        >>> list(l[2::2])
        [2, 4, 6, 8]
        

        【讨论】:

          【解决方案5】:

          返回一个列表,该列表包含列表中从索引 x 开始的每个第 y 个元素。

          >>> alist = range(10)
          >>> alist[0::2]
          [0, 2, 4, 6, 8]
          

          【讨论】:

            【解决方案6】:

            这是一个切片。

            [开始:结束:步骤]

            保留任何空白会将它们设置为默认值,在您的情况下,它会获取从 x 开始的每个 y 元素,直到列表末尾。

            见:What is :: (double colon) in Python when subscripting sequences?

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-07-18
              • 2016-03-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多