【问题标题】:Python Syntax / List Slicing Question: What does this syntax mean?Python 语法/列表切片问题:这个语法是什么意思?
【发布时间】:2011-10-15 16:26:47
【问题描述】:
lines = file('info.csv','r').readlines()

counts = []
for i in xrange(4):
    counts.append(fromstring(lines[i][:-2],sep=',')[0:-1])

如果有人能向我解释这段代码,将不胜感激。我似乎找不到更高级的切片示例——只有非常简单的示例无法解释这种情况。

非常感谢。

【问题讨论】:

    标签: python list delimiter slice


    【解决方案1】:

    理解切片语法的一个好方法是将其视为等效for 循环的语法糖。例如:

    L[a:b:c]
    

    等价于(例如,在 C 中):

    for(int i = a; i < b; i += c) {
        // slice contains L[i]
    }
    

    其中a 默认为0b 默认为len(L)c 默认为1

    (如果c,步长,是一个负数,那么ab的默认值是相反的。这给出了L[::-1]的合理结果。

    那么您唯一需要知道的另一件事是,在 Python 中,索引“环绕”,因此L[-1] 表示列表中的 最后一个 项,L[-2] 是第二个持续,等等。

    【讨论】:

      【解决方案2】:

      如果list 是一个列表,那么list[-1] 是列表的最后一个元素,list[-2] 是它之前的元素,依此类推。

      另外,list[a:b] 表示list 中的所有元素位于ab 之间位置的列表。如果缺少其中之一,则假定为列表的末尾。因此,list[2:] 是从list[2] 开始的所有元素的列表。而list[:-2] 是从list[0]list[-2] 的所有元素的列表。

      在您的代码中,[0:-1] 部分与[:-1] 相同。

      【讨论】:

        【解决方案3】:

        切片采用o[start:stop:step] 的形式,所有这些都是可选的。 start 默认为0,第一个索引。 stop 默认为 len(o),即列表索引的封闭上限。 step 默认为 1,包括列表的每个值。

        如果您指定一个负值,它表示距离列表末尾的偏移量。例如,[-1] 访问列表中的最后一个元素,-2 访问倒数第二个元素。

        如果您为 step 输入非1 值,您将包含不同的元素或以不同的顺序包含它们。 2 将跳过所有其他元素。 3 将跳过每三个中的两个。 -1 将在列表中倒退。

        [:-2]

        由于start 被省略,它默认位于列表的开头。 -2stop 表示排除最后两个元素。所以o[:-2] 对列表进行切片以排除最后两个元素。

        [0:-1]

        这里的0 是多余的,因为无论如何它都是 start 的默认值。这与另一个切片相同,只是它只排除最后一个元素。

        From the Data model page of the Python 2.7 docs:

        序列也支持切片:a[i:j] 选择索引为k 的所有项目,使得i &lt;= k &lt; j。当用作表达式时,切片是相同类型的序列。这意味着索引集被重新编号,使其从 0 开始。

        一些序列还支持带有第三个“step”参数的“扩展切片”:a[i:j:k] 选择索引为x 的所有项目,其中x = i + n*k, n &gt;= 0i &lt;= x &lt; j

        The "what's new" section of the Python 2.3 documentation 也讨论了它们,当它们被添加到语言中时。

        【讨论】:

          猜你喜欢
          • 2014-03-31
          • 2019-02-14
          • 1970-01-01
          • 2012-07-25
          • 2011-11-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多