我是Python的新手,并且在我的书中遇到了以下示例,但没有得到很好的解释.这是我从翻译中打印出来的:
>>> s = 'spam'
>>> s[:-1]
'spa'
Run Code Online (Sandbox Code Playgroud)
为什么切片没有开始绑定并'-1'返回除最后一个之外的每个元素?在呼叫s[0:-1]逻辑上与呼叫相同s[:-1]吗?它们都返回相同的结果.但我不确定python正在做什么.任何帮助将不胜感激.
Law*_*ton 35
是的,呼叫s[0:-1]与呼叫完全相同s[:-1].
在python中使用负数作为索引返回列表右侧的第n个元素(与通常的左侧相反).
所以如果你有一个列表如下:
myList = ['a', 'b', 'c', 'd', 'e']
print myList[-1] # prints 'e'
Run Code Online (Sandbox Code Playgroud)
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) 个之间。
因此 l[1:2] 为您提供了一个仅包含元素 l[1] 的列表,因为它为您提供了两个指针之间的所有内容。
类似地,负索引指向元素之间,但这次从后面开始计数,所以 -1 指向最后一个元素和倒数第二个元素之间,所以 [0:-1] 指的是不包括最后一个元素的项目块一。
作为语法糖,您可以从开头或实际上从结尾省略 0,因此 l[n:] 指的是从 l[n] 到结尾的所有内容(如果 n>=len(l) 然后它返回空列表)。
小智 5
>>> 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']
Run Code Online (Sandbox Code Playgroud)
请不要变得精疲力尽。
这里的标志很重要;当然-向后 您知道的跨度值。步幅是大小和方向都为“向量”(低于-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]
Run Code Online (Sandbox Code Playgroud)
全部结果[7, 6, 5, 4, 3]。
| 归档时间: |
|
| 查看次数: |
26830 次 |
| 最近记录: |