Python:列表的字符串如何一起工作? '垃圾邮件' [1:3]这是如何运作的?

时间:2017-10-10 07:18:20

标签: python string slice

我之前已经在这个问题上搜索过了 这个语句在python中是如何有效的?

>>> 'spam'[1:3]
>>> 'pa'

问题是切片如何与str类型相关联。它是否与垃圾邮件明显串联。

由于 --Div

4 个答案:

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