我不理解Python中负数边界的切片。这应该如何工作?

10 浏览
0 Comments

我不理解Python中负数边界的切片。这应该如何工作?

这个问题已经有答案了:

理解切片

我是Python的新手,并在我的书中遇到了以下没有很好解释的例子。这是我从解释器中打印出来的:

>>> s = 'spam'
>>> s[:-1]
'spa'

为什么用没有开头限制和\'-1\'切片可以返回除最后一个元素之外的每个元素?调用s[0:-1]s[:-1]逻辑上是一样的吗?它们都返回相同的结果。但是我不确定Python正在做什么。任何帮助都将不胜感激。

admin 更改状态以发布 2023年5月23日
0
0 Comments

>>> 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']


请不要对列表变得无精打采。

  1. 首先写出第一个元素。您可以使用正数或负数索引。我比较懒,所以我使用正数,比较省一笔(下面是7,或者是开始时的-3)。
  2. 在您想要停止的元素之前的索引。同样,您可以使用正数或负数索引(在下面是2或-8停止)。
  3. 这里符号很重要;当然,向后使用-; 大小步幅值,您已经知道了。
    步幅是具有大小和方向的“向量”(下面是-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]

0
0 Comments

是的,调用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

0