在Python开发的过程中,为了实现某项功能,经常需要对某些字符串进行特殊的处理,包括获取字符串中某个位置的字符(每一个字符其实就是长度为1的字符串)。字符串中的索引允许你访问字符串中的特定字符。
1、索引操作
Python中的字符串可以被视为一个由字符组成的字符序列,每个字符都有一个对应的索引值。通过使用索引值,我们可以轻松地获取字符串中指定位置的字符。索引值是基于0开始的,这意味着第一个字符的索引是0,第二个字符的索引是1,以此类推。例如:
动手练一练:
a = 'Hello World'
print(a[0]) # 输出第一个字符,结果为'H'
print(a[8]) # 输出第九个字符,结果为'r'
print(a[-1]) # 输出最后一个字符,结果为'd'
print(a[-2]) # 输出最后第二个字符,结果为'l'
执行以上代码,输出结果为:
H
r
d
l
上面的例子中,通过使用方括号和索引值,我们可以方便地获取字符串中的指定字符,“Hello World”字符串中间的空格也代表一个字符。这里需要注意的是,索引值是从0开始计数的,如果索引值是负数,则表示从字符串末尾开始计数,那么就会从字符串的右边开始往左计算位置,所以上面例子中的“a[-1]”会输出最后一个字符“d”。注意:-0和0都表示第一个字符,上面例子中的“a[0]”如果改成“a[-0]”结果也是输出第一个字符“H”。
2、切片操作
除了使用“索引”获取单个字符外,我们还可以使用“切片”操作来获取字符串中的一段“子”字符串。“切片”操作使用冒号“:”来指定起始位置和结束位置,起始位置包含在切片结果中,而结束位置不包含在切片结果中。(注意:冒号必须是英文输入法输入,不可为中文输入法输入)例如:
动手练一练:
a = 'Hello World'
print(a[0:4]) # 输出从第一个字符到第四个字符,结果为'Hell'
print(a[8:]) # 输出从第九个字符到最后一个字符,结果为'rld'
print(a[:3]) # 输出从第一个字符到第三个字符,结果为'Hel'
执行以上代码,输出结果为:
Hell
rld
Hel
从上面的例子可以看出,在“a[0:4]”中冒号“:”前面的数字是起始位置(切片包括该位置),“0”表示从第一个开始,冒号“:”后面的数字是结束位置(切片不包括该位置),“4”表示第五个字符“o”为终点,但是“o”不包含在结果中,因此“Hello World”输出结果“Hell”。如果省略冒号“:”左边的数字,Python就会认为我们要获取从0开始的字符串。如果省略冒号“:”右边的数字,那么Python会认为我们要获取到最后一个字符。例如:
动手练一练:
a = "Python"
print(a[2:]) # 表示从第三个到最后一个,输出结果为'thon'
print(a[:2]) # 表示从第一个到最后三个,但是不包含第三个,输出结果为'Py'
print(a[2:] + a[:2]) # 输出结果为'thonPy'
print(a[:]) # 表示从第一个到最后一个,输出结果为'Python'
print(a[-2:]) # 表示从最后第二个到最后一个,输出结果为'on'
执行以上代码,输出结果为:
thon
Py
thonPy
Python
on
普通“索引”只取出字符串中一个指定字符,而“切片”取出字符串中指定范围内的一段字符,可以理解为,在一定范围里面,用刀切出一部分,达到自己需要的一部分。下面以a="Python"为例,展示正索引和负索引:
值 | P | y | t | h | o | n |
正索引 | 0 | 1 | 2 | 3 | 4 | 5 |
负索引 | -6 | -5 | -4 | -3 | -2 | -1 |
参考上面的表格,切片“[起始位置:结束位置]”中,切片的起始位置(包括该位置),0表示从第一个字母开始,1表示从第二个字母开始,以此类推。-1表示从倒数第一个字母开始,-2表示从倒数第二个字母“o”开始,以此类推。切片的结束位置(且不包括该位置),0表示第一个字母为终点,1表示第二个字母为终点,以此类推。-1表示倒数第一个字母为终点,-2表示倒数第二个字母为终点,以此类推。省略“:”左边的数字,表示获取从0开始的字符串,省略“:”右边的数字,获取到最后一个字符。都省略“:”前后的数字,表示获取从0开始到最后一个字符。
3、索引和切片的范围
如果索引超出了字符串的长度,Python会抛出IndexError错误。例如:
动手练一练:
a = 'Hello World'
print(a[22]) # 索引超出了原来字符串的长度,解释器输出错误
执行以上代码,输出结果为:
IndexError: string index out of range
动手练一练:
a = 'Python'
print(a[0:25]) # 25超出了字符串的长度,Python解释器会忽略这个错误,输出结果为'Python'
执行以上代码,输出结果为:
Python
第一个例子中索引超出了原来字符串的长度,那么Python解释器将输出错误,但是如果使用的是切片方式,第二个例子中Python解释器就会忽略这个错误。
4、字符串不可改变
在Python中,字符串是不可变的,无论是“索引”还是“切片”方式都只能获取字符串,而不能通过赋值的方式改变原字符串的内容,Python提供了一些其他方法可对字符串进行“更改”或“替换”,其实是生成了新的字符串,例如 replace()、re.sub() 函数等,在后面的教程中将会讲解相关函数。
动手练一练:
string = 'Python'
string[0] = 'H' # 输出错误,不能通过赋值改变字符串
string[1:] = 'Hello' # 输出错误,不能通过赋值改变字符串
print(string)
执行以上代码,输出结果为:
TypeError: 'str' object does not support item assignment
因为Python中已经存在的字符串是「不可变」的,所以上面的例子中Python解释器输出错误信息:“类型错误:“字符串”对象不支持项目分配”。
动手练一练:
a = 'Python'
b = 'H'
c = a[1:] + b
print(c)
执行以上代码,输出结果为:
ythonH
上面的例子中,如果想要一个和原来不一样的字符串,就只能重新创建一个新的字符串“c”。
Python中有很多内置函数,其中一个非常常用的是len()函数。len()函数用于返回字符串的长度。
动手练一练:
# 计算字符串的长度
string = "Hello Python"
print(len(string))
执行以上代码,输出结果为:
12
本节教程中,我们简单讲解了字符串的操作,在后面的教程中会介绍更多更复杂的字符串操作。