青少年、零基础、初学者Python编程从入门到精通,“老马带小马 一块学Python”编程系列。

大家可能很奇怪,只听说过数的运算,字符串还能运算呢?是的,而且字符串的运算还是相当灵活、比较复杂的,熟练掌握了字符串的运算,可以极大提高将来编程的效率和质量,尤其涉及字符串的各种应用场景。

字符串的连接

x = "您好"
y = "Python"
z = x+y
print(z)
上述代码的输出结果如下所示,采用加号(“+”)运算符直接把两个字符串连接了起来。
您好Python
重复字符串的连接
x = "Python"
z = x*3
print(z)
上述代码的输出结果如下所示,采用乘号(“*”)运算符,字符串“x”作为被乘数,数字“3”作为乘数,最终把3个x字符串连接了起来。
PythonPythonPython
字符串的关系运算
print('abc'=='abc')
print('ac'>'abc')
print('a'
print('abc'!='ABC')
上述代码的输出结果如下所示,均为True。
True
True
True
True
采用“”、“>=”、“==”、“!=”关系运算符对两个字符串进行比较,其实是依次对两字符串同位置上字符的ASCII码进行比较。在ASCII码标准中,用从65至90的数,依次代表了26个大写英文字母(从A、B、C,一直到Z,与字母表顺序一致)的ASCII码;用从97至122的数,依次代表了26个小写英文字母(从a、b、c,一直到z,与字母表顺序一致)的ASCII码。需要说明两点:第一,因为ASCII码标准对于字母编码的设计与英文字母表的顺序一致,所以,基于ASCII码的比较,其实也相当于基于字母表排序的比较;第二,需要注意的是,大小写字母是分别编码的,且大写字母的编码段整体比小写字母的编码段要偏小,一般情况下,若要进行不区分字母大小的字符串比较,需要事先把参与比较的字符串全部转换成大写或者小写后再进行比较。第1行代码:两字符串所有位置上的字符均一样,两字符串相等;
第2行代码:在比较第2个字符时,因为“c”的ASCII码为99,“b”的ASCII码为98,因此前者字符串大于后者字符串;
第3行代码:第1个字符相同,但前者字符串短、后者长,因此前者小于后者;
第4行代码:在比较第1个字符时,因为小写“a”的ASCII码为97,大写“A”的ASCII码为65,因此前者字符串大于后者字符串。
另外,解释一下含中文字符串的比较,因为字符串的比较其实是基于系统中对英文字符或中文字的编码进行的比较,跟中文字的拼音顺序或者笔画顺序没有关系,所以,对于中文字符串的关系运算,一般用到的主要只有“==”和“!=”。补充一点,可采用Python内部函数ord,查询英文字符或中文字的编码,把要查询的字符或中文字作为字符串参数传入即可,需要注意的是,这个函数传入的字符串的长度只能为1,即只能包含1个英文字符或者一个中文字。
print(ord("a"),ord("A"),ord("字"),ord("关"))
print("字符串"=="字符串")
print("字符串"!="关系比较")
print("字符串">"关系比较")
输出结果如下:
97 65 23383 20851
True
True
True
字符串的包含关系
x = "t" in "Python"
y = "包含" in "字符串的包含关系"
z = "不包含" not in "字符串的包含关系"
print(x,y,z)
上述代码的输出结果如下所示,均为True。当“in”及“not in”前后均为字符串时,会进行字符串包含关系的运算:in:如果“in”前面的字符串完整的包含在“in”后面的字符串里面(包含一次或多次),则返回True,否则返回False;
not in:如果“not in”前面的字符串没有被完整的包含在“not in”后面的字符串里面,则返回True,否则返回False。
True True True
字符串的访问
对字符串的访问有三种方式:
1.通过字符串变量直接访问整个字符串,如下所示:
x = "Python"
print(x)
上述print函数通过把x变量作为参数,因此输出如下,打印输出了整个字符串。
Python
2.通过采用索引(下标)可以访问字符串中任意一个字符,如下所示,需要说明的是:单个字符仍然属于字符串类型,只不过其是一个长度为1的字符串而已。
x = "Python"
print(x[2],x[0],x[5])
print(x[-4],x[-6],x[-1])
输出结果如下所示:
t P n
t P n
这里需要说明几点:按索引的方式访问时,在变量后的中括号(英文中括号)内标示出要访问的字符所在的索引即可。
字符串的索引可以采用正向(从首至尾)的计数方式,此时,索引的值从0开始,因此,字符串最后一个字符的索引为其长度减1,比如上述“Python”字符串,按正向方式计数的索引值依次为:0、1、2、3、4、5。因此,字符串的索引值不允许大于等于字符串长度值,否则会报错:“IndexError: string index out of range”。
字符串的索引也可以采用逆向(从尾至首)的计数方式,此时,字符串最后一个字符的索引值为-1(即我们经常提到的倒数第一),依次逆向从尾至首,-2、-3、-4......因此,字符串第一个字符的索引为其长度值取负,比如上述“Python”字符串,按逆向方式计数的索引值依次为(从尾至首排序):-1、-2、-3、-4、-5、-6。因此,字符串的索引值不允许小于字符串长度值取负,否则同样会报错:“IndexError: string index out of range”。
3.切片的访问方式。上述第2种访问方式只能访问一个字符,而切片方式则可以访问字符串中相应范围内的子字符串(字符串的全部或部分字符)。之所以称之为“切片”,因为如同切面包片一样,两刀切下去,去掉头、去掉尾,把中间的字符串取出来,如下所示。
x = "Python"
print(x[2:5])
print(x[-4:5])
print(x[-4:-1])
print(x[2:])
print(x[-4:])
print(x[:5])
print(x[:-1])
print(x[:])
输出的结果如下所示:
tho
tho
tho
thon
thon
Pytho
Pytho
Python

这里说明几点:切片的访问方式仍然采用英文中括号的形式,但是中括号里面多了一个冒号(英文冒号),冒号前面表示要取的起始字符(包括该字符)、冒号后面表示截止字符(注意:不包括该字符),需要注意的是:起始字符应在截止字符的左侧,否则输出会是空字符串;

冒号前后的索引值均可以选择按正向、逆向任一种计数方式,但是要注意不要超过了上述提到的索引取值范围;

冒号前面要是不输入索引值,则默认表示从首字符开始;冒号后面要是不输入索引值,则默认表示截至到最后一个字符(包括最后的这个字符)。青少年、零基础、初学者Python编程从入门到精通,“老马带小马 一块学Python”编程系列。