lines = file('info.csv','r').readlines()
counts = []
for i in xrange(4):
counts.append(fromstring(lines[i][:-2],sep=',')[0:-1])
如果有人能向我解释这段代码,我们将不胜感激。我似乎无法找到关于切片的更高级的例子 - 只有非常简单的解释这种情况的例子。
非常感谢。
答案 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 >= 0
和i <= 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
默认为0
,b
默认为len(L)
,c
默认为1
。
(如果c
,则该步骤为负数,则a
和b
的默认值会相反。这为L[::-1]
提供了明智的结果)。
然后,您需要知道的另一件事是,在Python中,索引“环绕”,以便L[-1]
表示列表中的 last 项,{{1}是倒数第二个,依此类推。
答案 2 :(得分:2)
如果list
是列表,则list[-1]
是列表的最后一个元素,list[-2]
是之前的元素,依此类推。
此外,list[a:b]
表示list
位于a
和b
之间的所有元素的列表。如果其中一个丢失,则假定它代表列表的末尾。因此,list[2:]
是从list[2]
开始的所有元素的列表。 list[:-2]
是从list[0]
到list[-2]
的所有元素的列表。
在您的代码中,[0:-1]
部分与[:-1]
相同。