我是Python的新手,并且在我的书中遇到了以下示例,但没有得到很好的解释。这是我从翻译中打印出来的:
>>> s = 'spam'
>>> s[:-1]
'spa'
为什么没有开始绑定的切片和'-1'
返回除最后一个之外的每个元素?调用s[0:-1]
在逻辑上与调用s[:-1]
相同吗?它们都返回相同的结果。但我不确定python正在做什么。任何帮助将不胜感激。
是的,调用s[0:-1]
与调用s[:-1]
完全相同。
在python中使用负数作为索引返回列表右侧的第n个元素(与通常的左侧相反)。
所以如果你有一个列表如下:
myList = ['a', 'b', 'c', 'd', 'e']
print myList[-1] # prints 'e'
print语句将打印“e”。
一旦你明白了(你可能已经知道,这不是完全清楚你是否感到困惑之一)我们可以开始讨论切片。
我将假设您了解沿着myList[2:4]
(将返回['c', 'd']
)的切片的基本知识并直接跳转到切片表示法,其中一侧留空。
正如您在帖子中所怀疑的那样,myList[:index]
与myList[0:index]
完全相同。
顺便说一下,这也是另一种方式... myList[index:]
与myList[index:len(myList)]
相同,将返回列表中列出的所有元素从index
开始直到结束(例如print myList[2:]
将打印['c', 'd', 'e']
)。
作为第三点,您甚至可以在没有指示索引的情况下执行print myList[:]
,这基本上会返回整个列表的副本(相当于myList[0:len(myList)]
,返回['a','b','c','d',' E'])。如果您认为myList将在某个时刻发生更改但您希望将其副本保留在当前状态,那么这可能很有用。
如果你还没有这样做,我发现只是在Python解释器中乱七八糟地帮助理解这些东西。我推荐IPython。
关键的一点是,python索引应该被认为是指向列表中条目之间的空格的指针,而不是元素本身。因此,0指向开头,1指向第一和第二,...和n指向第n和第(n + 1)st之间。
因此l [1:2]给出一个只包含元素l [1]的列表,因为它给出了两个指针之间的所有内容。
类似地,负指数指向元素之间,但这次从后面开始计数,所以最后一个元素和倒数第二个元素之间的-1个点,所以[0:-1]指的是一个不包括最后一个元素的项目块一。
作为语法糖,你可以从开头或实际结束时留下0,所以l [n:]指的是从l [n]到结尾的所有东西(如果n> = len(l)那么它返回空列表)。
>>> l = ['abc', 'def', 'ghi', 'jkl', 'mno', 'pqr', 'stu', 'vwx', 'yz&']
# I want a string up to 'def' from 'vwx', all in between
# from 'vwx' so -2;to 'def' just before 'abc' so -9; backwards all so -1.
>>> l[-2:-9:-1]
['vwx', 'stu', 'pqr', 'mno', 'jkl', 'ghi', 'def']
# For the same 'vwx' 7 to 'def' just before 'abc' 0, backwards all -1
>>> l[7:0:-1]
['vwx', 'stu', 'pqr', 'mno', 'jkl', 'ghi', 'def']
请不要对列表无精打采。
l = [0,1,2,3,4,5,6,7,8,9]
l[7:2:-1], l[-3:2:-1], [-3:-8:-1],l[7:-8:-1]
全部导致[7, 6, 5, 4, 3]
。负指数从结尾开始计算,因此s [: - 1]等价于s [:len(s)-1],s [-1]是最后一个元素,例如。
是的,调用s[0:-1]
在逻辑上与s[:-1]
相同,因为切片最好定义为:
[beginning_index:ending_index]
Python允许您省略0,因为这允许您的代码更简洁。
如果我们想从字符串的后端打印,我们可以进行负索引。索引从-1开始。
示例:s ='hello world'
s [-11:-1] ='你好世界的[-1:-11] =''//起始值应该更低(例如,在这种情况下-1大于-11)如果它更大它赢了打印任何东西。