反复切割字符串

8

对于元组和列表,重复切片是完全可行的:

>>> tuple = ("nav", "yad")
>>> tuple[0]
'nav'
>>> tuple[0][0]
'n'

但是对于字符串来说:
>>> name="university"
>>> name[0]
'u'

这里奇怪的是,当我尝试对字符串名称变量进行重复切片时,name[0][0] 或者 name[0][-1] 都没有内容,那么为什么它会显示 "u" 呢?

>>> name[0][0]
'u'
>>> name[0][-1]
'u'

如果某个东西在name[0][0]处,为什么不在其他索引上呢?

>>> name[0][1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

列表不支持重复切片。尝试使用[1,2,3][0][0] - Fred Foo
因为在索引字符串时(从我收集的示例中实际上不是切片),您会得到字符串 - 在Python中,一个字符是长度为一的字符串。类型不会改变。但对于元组/列表则不是这种情况。 - gorlum0
2个回答

12

字符串是一个序列。一个字符的字符串仍然是一个只有一个元素的序列。因此,对于一个字符串,您可以执行name[0][0][0][0]...操作,并且它将正常工作。同样,对于索引-1也是一样的,它返回序列的最后一个元素:

>>> name[0][0]
'u'
>>> name[0][0][-1]
'u'
>>> name[0][0][-1][-1]
'u'

name[0][1]很明显会失败,因为字符串name[0]只有一个元素。


0
补充@Roman的回答。我认为你误以为name[0]会返回某种char。但实际上不是这样的。发生的情况是name[0]返回长度为1的字符串。因此,无论你用0重复索引非空字符串多少次,它总是返回相同的结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接