Python的切片表示法是如何工作的?也就是说:当我编写[x:y:z]、a[:]、a]::2]等代码时,我如何理解哪些元素最终会出现在切片中?请在适当的地方附上参考资料。
另请参见:为什么切片和范围上限是互斥的?
Python的切片表示法是如何工作的?也就是说:当我编写[x:y:z]、a[:]、a]::2]等代码时,我如何理解哪些元素最终会出现在切片中?请在适当的地方附上参考资料。
另请参见:为什么切片和范围上限是互斥的?
当前回答
这里有一个简单的记忆方法,可以记住它是如何工作的:
S L*I*C*E*切片的“i”位于第一位,代表包容,“e”排在最后,代表独占。
所以array[j:k]将包括第j个元素,并排除第k个元素。
其他回答
Python教程对此进行了讨论(向下滚动一点,直到您了解到关于切片的部分)。
ASCII艺术图也有助于记住切片的工作方式:
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
记住切片工作方式的一种方法是将索引视为字符之间的指针,第一个字符的左边缘编号为0。然后,n个字符串的最后一个字符的右边缘具有索引n。
使用一点后,我意识到最简单的描述是它与for循环中的参数完全相同。。。
(from:to:step)
其中任何一项都是可选的:
(:to:step)
(from::step)
(from:to)
然后,负索引只需要将字符串的长度添加到负索引中即可理解它。
不管怎样,这对我来说都很有效。。。
您可以使用切片语法返回字符序列。
指定用冒号分隔的开始和结束索引,以返回字符串的一部分。
例子:
获取从位置2到位置5的字符(不包括):
b = "Hello, World!"
print(b[2:5])
从开始切片
通过省略起始索引,范围将从第一个字符开始:
例子:
获取从开始到位置5的字符(不包括):
b = "Hello, World!"
print(b[:5])
切片到底
通过省略结束索引,范围将结束:
例子:
从位置2获取字符,一直到结尾:
b = "Hello, World!"
print(b[2:])
负索引
使用负索引从字符串末尾开始切片:实例
获取字符:
来自:“世界!”中的“o”(位置-5)
至,但不包括:“世界!”中的“d”(位置-2):
b = "Hello, World!"
print(b[-5:-2])
还可以使用切片分配从列表中删除一个或多个元素:
r = [1, 'blah', 9, 8, 2, 3, 4]
>>> r[1:4] = []
>>> r
[1, 2, 3, 4]
我的大脑似乎很乐意接受lst[开始:结束]包含开始项。我甚至可以说这是一个“自然的假设”。
但偶尔会有一种怀疑悄悄出现,我的大脑会要求我保证它不包含结尾元素。
在这些时刻,我依靠这个简单的定理:
for any n, lst = lst[:n] + lst[n:]
这个漂亮的属性告诉我,lst[start:end]不包含end-th项,因为它位于lst[end:]中。
注意,这个定理对任何n都是正确的。例如,您可以检查
lst = range(10)
lst[:-42] + lst[-42:] == lst
返回True。