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

Res*_*her 1 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])
Run Code Online (Sandbox Code Playgroud)

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

非常感谢你.

小智 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这里是多余的,因为那是开始将反正都默认为.这与另一个切片相同,只是它只排除了最后一个元素.

从Python 2.7文档的数据模型页面:

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

一些序列还支持使用第三个"step"参数的"扩展切片":a[i:j:k]选择带索引的所有项目,x其中x = i + n*k, n >= 0i <= x < j.

Python 2.3文档中的"新内容"部分也会在将它们添加到语言中时对它们进行讨论.


Dan*_*den 5

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

L[a:b:c]
Run Code Online (Sandbox Code Playgroud)

相当于(例如,在C中):

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

a默认0,b默认为len(L),并c默认为1.

(如果c步骤是一个负数,则默认值为ab.这会给出一个合理的结果L[::-1]).

然后你需要知道的另一件事是,在Python中,索引"环绕",这L[-1]表示列表中的最后一项,L[-2]是倒数第二项,依此类推.