2.7.2 下标访问

在自然语言交流中,我们经常需要针对字符的位置信息进行描述,比如:

·英文人名的首字母需要大写。

·请给出身份证号的最后四位。

·问句应该以问号结尾。

·“上海自来水来自海上”这句话是回文(对称的文字)。

在开始了解字符串的下标操作之前,我们首先来了解len函数。在Python语言里,用len函数可以得到一个字符串的长度。


>>> len('aabbcc')
6
>>> len('')
0
>>> len(' ')
1
>>> name = "Ronnie O'Sullivan"
>>> len(name)
17

在Python语言里,对于字符串,我们可以根据下标(位置偏移量)对其进行操作,第一个字符的下标是0,第二个字符的下标是1,依次类推。


>>> name = "Ronnie O'Sullivan"
>>> name
"Ronnie O'Sullivan"
>>> name[0]
'R'
>>> name[7]
'O'

Python还有一个特别的设计,即通过负值的下标,可以很方便地从后往前定位字符,下标–1对应的是最后一个字符,下标–2对应的是倒数第二个字符,依次类推。如果读者有C++或Java的编程背景,应该深有体会,这样的操作在C++或Java里并不是特别直观。Python的这个设计给程序员带来了很大的便利。


>>> name = "Ronnie O'Sullivan"
>>> name[-1]
'n'
>>> name[-3]
'v'

下标的操作还可以是一个范围,操作的结果是得到一个子字符串。

在string[start_index:end_index]中,start_index是起始下标,end_index是结束下标,起始位置的字符会被包含在结果子字符串中,结束下标位置的字符不会被包含。


>>> name
"Ronnie O'Sullivan"
>>> name[0:4]
'Ronn'

起始下标可以省略,如果不指定,默认为字符串的头(下标为0);结束下标也可以省略,如果不指定,默认为字符串的尾。


>>> name[7:]
"O'Sullivan"

>>> name[:6]
'Ronnie'

>>> name[:]
"Ronnie O'Sullivan"

当然,负值的下标也同样适用。


>>> name[-10:]
"O'Sullivan"

>>> name[-10:-2]
"O'Sulliv"

如果结束下标比起始下标还要小,结果会是一个空字符串。


>>> name[0:6]
'Ronnie'
>>> name[6:0]
''

回到本节最开始提到的一点:“上海自来水来自海上”这句话是回文。请读者思考,我们如何判断一个字符串是不是回文?