【Python】字符串的深入学习

一:浅谈字符串
在我们的编程过程中,我们常常需要使用到字符串这一概念。尤其是在Python的编程中,字符串的概念涉及的尤其广泛。但是对于初学者来说,对字符串的理解还停留在输入和输出的层面上,这对于我们的学习来说应该是不够的,比如我们对大量文本进行操作的时候就需要大量的使用字符串。那么,我们该如何深入理解字符串呢?
我觉得,我们应该分清字符串和int,float等变量的不同,又要发掘字符串和python中列表的联系。首先,字符串并不是一个单独的数据。字符串是一个“串”,是有限字符的序列。那么什么是序列呢?序列是保存多个数据项的对象,他们一个接一个的存储,我们可以对存储在序列里的元素进行检索和操作。这个定义是不是看起来非常像列表呢?没错,两种基本的序列类型就是列表和元组。实际上,字符串也是一种序列。正是因为如此,python中很多列表的概念和方法也适用于字符串。那么接下来我会展示部分常用的字符串方法并提出一些注意事项。
二:字符串常用方法
<1>访问字符:
很多时候我们需要访问字符串中的部分或所有字符,比如统计字符串中出现次数最多的字符或者要求你提取出字符串中的数字等等。有的时候我们需要遍历整个字符串,有时候我们需要访问指定位置字符。
(1).利用循环遍历字符串:
最简单的方法是使用循环迭代字符串,例如使用for循环:
在这里插入图片描述
(2).访问指定位置字符:
如果我们预先知道想要访问的字符处在字符串的位置,我们就可以使用索引访问指定位置的字符。和C语言和C++以及python中的列表一样,索引从零开始,到字符串长度减一为止。我们在python中甚至可以使用负的索引,比如索引-1就代表最后一个字符:
在这里插入图片描述
但是当我们使用索引的时候,我们需要警惕我们的索引出错而抛出错误。比如:
在这里插入图片描述
此处我们的index索引超出了字符串存储范围,所以抛出了IndexError错误。那么面对这个问题,除了刚刚讲过的利用循环的迭代器还有什么方法规避吗?这里我们可以用到len函数来实现,在学习列表的时候我们已经学过len()函数,他会返回序列的长度,而在刚刚的例子中我们就可以利用这个函数防止超出序列末尾:
在这里插入图片描述
(3).判断字符串中是否包含指定的字符或字符串:
在python中我们可以使用in和not in来判断字符串中是否包含指定的字符或字符串,示例如下:
在这里插入图片描述
<2>字符串的拼接和截取:
一种常见的字符串操作是把一个字符串拼接到另一个字符串末尾,我们使用‘+’就可以做到,这里不做展示。也有的时候我们需要从字符串中截取一部分,也叫做字符串的切片,切片得到的又叫做原字符串的子串。一般形式为string[start:end],其中start是子串开头的索引,end是末尾的索引(但不包含);如果不填写start,将把索引0作为start,如果不写end,python将把字符串长度作为end,范例如下:
在这里插入图片描述
同时我们也可以使用string[start:end:step]设置拆分字符串的步长,即每隔step个字符截取字符串内容。例如:
在这里插入图片描述
<3>分割字符串:
python中有一个split()函数,可以根据我们给出的数据作为分割点,分割字符串并返回列表。如果我们想用“,”为分割点,则可以写作split(’,’),若不写分割点则默认为空格为分割点。范例如下:
在这里插入图片描述
<4>其他常见字符串测试方法:

方法 描述
isalpha() 如果字符串仅包含字母且长度至少为1个字符,则返回true,否则返回false
isdigit() 如果字符串仅包含数字且长度至少为1个字符,则返回true,否则返回false
isalnum() 如果字符串仅包含字母或数字且长度至少为1个字符,则返回true,否则返回false
lower() 返回将所有字母转换成小写字母的字符串副本,已经是小写或不是字母的字符不更改
upper() 返回将所有字母转换成小写字母的字符串副本,已经是小写或不是字母的字符不更改
lstrip() 返回删除前导空白字符的字符串副本,前导空白字符包括空格,换行符‘\n’和制表符‘\t’
lstrip(char) char是包含字符的字符串,该方法会返回删除前导char字符的字符串副本
rstrip() 返回删除尾部空白字符的字符串副本,尾部空白字符包括空格,换行符‘\n’和制表符‘\t’
rstrip(char) char是包含字符的字符串,该方法会返回删除尾部char字符的字符串副本
strip() 返回删除所有前导和尾部空白字符的字符串副本
strip(char) 该方法会返回删除前导和尾部char字符的字符串副本
endswith(endstring) endstring是一个字符串,若一个字符串以endstring结尾则该方法返回true
startswith(startstring) startstring是一个字符串,若一个字符串以startstring开头则该方法返回true
find(substring) substring是一个字符串,该方法返回找到的substring的最小索引位置,若找不到substring则返回-1
replace(old,new) old和new都是字符串。该方法返回将所有old转化成new的字符串副本

有关字符串常见方法列表,大家可以查询www.python.org
三:字符串是不可变的
在上面的方法列表中,我们看到很多次字符串副本的说法。实际上我们是不应该忽略这一点的。因为在python中,字符串是不可变的。这意味着字符串一旦创建就不能改变,我们有些操作,如连接,给我们一种我们改变了字符串的错觉,实际上我们并没有改变。我们很多时候是改变了我们定义的字符串变量链接的字符串。例如:
在这里插入图片描述
这个范例中,我们只是改变了last_name指向的字符串而没有改变原来last_name对应的‘Alex’,而‘Alex’将因为没有变量指向他变得不可用,最终python解释器会从内存中删除不可用的字符串。
正因如此,如果我们赋值给string(index),那么一定会报错
在这里插入图片描述
所以我们在使用上面将的字符串方法时,返回的是字符串的副本,所以我们可以让原来的字符串变量指向副本,也可以重新定义一个变量,但是只执行并没有实际上改变原来的变量指向的字符串。现以upper()函数为例:
在这里插入图片描述

发布了7 篇原创文章 · 获赞 7 · 访问量 944

猜你喜欢

转载自blog.csdn.net/qq_46018836/article/details/105247553