我不理解Python中负数边界的切片。这应该如何工作?
我不理解Python中负数边界的切片。这应该如何工作?
这个问题已经有答案了:
我是Python的新手,并在我的书中遇到了以下没有很好解释的例子。这是我从解释器中打印出来的:
>>> s = 'spam' >>> s[:-1] 'spa'
为什么用没有开头限制和\'-1\'
切片可以返回除最后一个元素之外的每个元素?调用s[0:-1]
和s[:-1]
逻辑上是一样的吗?它们都返回相同的结果。但是我不确定Python正在做什么。任何帮助都将不胜感激。
>>> 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']
请不要对列表变得无精打采。
- 首先写出第一个元素。您可以使用正数或负数索引。我比较懒,所以我使用正数,比较省一笔(下面是7,或者是开始时的-3)。
- 在您想要停止的元素之前的索引。同样,您可以使用正数或负数索引(在下面是2或-8停止)。
-
这里符号很重要;当然,向后使用-; 大小步幅值,您已经知道了。
步幅是具有大小和方向的“向量”(下面是-1及以下,全部向后)。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[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。