Python语法/列表切片问题:这种语法是什么意思?

时间:2011-07-29 05:18:36

标签: python list delimiter slice

lines = file('info.csv','r').readlines()

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

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

非常感谢。

3 个答案:

答案 0 :(得分:5)

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

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

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

[:-2]

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

[0:-1]

这里的0是多余的,因为无论如何,这都是开始违约的。这与其他切片相同,只是它只排除最后一个元素。

From the Data model page of the Python 2.7 docs

  

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

     

某些序列还支持使用第三个“步骤”参数的“扩展切片”:a[i:j:k]选择索引x的所有项目x = i + n*k, n >= 0i <= x < j

当他们被添加到语言中时,

The "what's new" section of the Python 2.3 documentation也会对它们进行讨论。

答案 1 :(得分:5)

理解切片语法的一个好方法是将其视为等效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]表示列表中的 last 项,{{1}是倒数第二个,依此类推。

答案 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]相同。