我之前已经在这个问题上搜索过了 这个语句在python中是如何有效的?
>>> 'spam'[1:3]
>>> 'pa'
问题是切片如何与str类型相关联。它是否与垃圾邮件明显串联。
由于 --Div
答案 0 :(得分:2)
切片会创建对象的副本
记住切片如何工作的一种方法是将索引视为指向字符之间,第一个字符的左边缘编号为0.然后,n个字符的字符串的最后一个字符的右边缘具有索引n,例如:
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
第一行数字给出了字符串中索引0 ... 6的位置;第二行给出相应的负指数。从i到j的切片分别由标记为i和j的边之间的所有字符组成。
在你的情况下
+---+---+---+---+
| s | p | a | m |
+---+---+---+---+
0 1 2 3 4
-4 -3 -2 -1
>>> 'spam'[1:3]
'pa'
答案 1 :(得分:1)
如果有帮助的话,可以考虑普通数组之类的字符串。例如
0 1 2 3
s p a m
因此spam[1:3]
会提供字符串[1, 3)
的位置pa
的内容,即same name
答案 2 :(得分:1)
可以切换str
类型的原因是因为它们具有__getslice__
方法(在python 2中)和__getitem__
方法(在python 2和3中)。
dir('spam')
会向您展示这些方法。
另外,在python 2中尝试'spam'.__getslice__(1,3)
或在python 3中尝试'spam'.__getitem__(slice(1,3))
。
您可以参考https://docs.python.org/2/reference/datamodel.html#object.getslice了解详情。
答案 3 :(得分:0)
您可以简单地将字符串视为不可变字符列表(它们本身就是长度为1的字符串):
>>> list('spam')
['s', 'p', 'a', 'm']
>>> sorted('spam')
['a', 'm', 'p', 's']
>>> [c * 2 for c in 'spam']
['ss', 'pp', 'aa', 'mm']
这意味着赋值不起作用,但切片与列表相同:
>>> 'spam'[1:3]
'pa'
>>> list('spam')[1:3]
['p', 'a']