在Python中,字符串是由0个或多个字符组成的不可变序列。简单点说,字符串就是由⼀对双引号 " 或者 ⼀对单引号 ' 括起来的一串字符。
01 字符串的定义1)双引号定义
>>> str1 = "人生苦短,我用Python">>> print(str1)人生苦短,我用Python
2)单引号定义
>>> str1 = '人生苦短,我用Python'>>> print(str1)人生苦短,我用Python
3)三引号定义
一般用一对三个单引号进行定义。在三引号中可以使用特殊字符而不用转义符,字符串在输出时保持原来定义的格式。
>>> strDst = '''2020年,我被Python的设计哲学吸引,学会了Python Web开发。2021年,我的目标是进大厂,拿高薪。 实战!实战!实战! 2020/11月'''>>> print(strDst)2020年,我被Python的设计哲学吸引,学会了Python Web开发。2021年,我的目标是进大厂,拿高薪。 实战!实战!实战! 2020/11月>>>
一般用在以下场景:
多行注释;
按照输入时的原格式输出文本;
为了保持可读性而需要保持一定格式的文本,如SQL语句;
语法格式:len(string)
>>> str1 = "hi, python">>> len(str1)10>>> str1 = "哲学">>> len(str1)2>>> str1 = "123456">>> len(str1)6
03
字符串元素的索引访问
根据前面的定义,字符串也是有序元素的集合。因此,通过整数索引直接访问字符串中的元素。字符串中第一个元素的索引是0,第二个元素的索引是1,…,索引依次加1,直到[列表长度-1]。
>>> str1 = "python">>> str1[0] #第一个元素'p'>>> str1[0] #最后一个元素'p'>>>
为了方便进行字符串最后面的元素的访问,Python还提供一种特殊语法的索引:负数索引,从最右边到最左边进行倒数的索引计数。最右边元素(最后一个元素)索引是-1,倒数第二个元素索引是-2,…,以此类推,第一个元素索引是-列表长度。
>>> str1 = "python">>> str1[-1] #最后一个元素'n'>>> str1[-2] #倒数第2个元素'o'>>> str1[-len(str1)] #第1个元素'p'>>>
特别注意:无论是
正常索引还是
负数索引,访问元素时的
索引不能超过字符串的
索引范围(索引不能越界),否则会抛出IndexError异常。
>>> str1 = "python">>> str1[10]Traceback (most recent call last): File "", line 1, in <module> str1[10]IndexError: string index out of range>>> str1[-10]Traceback (most recent call last): File "", line 1, in <module> str1[-10]IndexError: string index out of range>>>
总结:由于列表和字符串都是有序序列,因此在进行元素访问、切片、遍历等操作时,它们的
语法都一样。
04
字符串拼接
使用加号”+”对2个字符串进行拼接,生成一个新的字符串。
>>> str1 = "hi,">>> str2 = "python">>> str3 = str1 + str2>>> print(str3)hi,python>>>
注意:Python是强类型的语言,因此字符串不允许直接与其他类型进行拼接,而是要进行显示转换为字符串再进行拼接。例如:
>>> str1 = "今年的奖金:">>> money = 50000>>> str1 + money + "元"Traceback (most recent call last): File "", line 1, in <module> str1 + money + "元"TypeError: can only concatenate str (not "int") to str>>> str1 + str(money) + "元"'今年的奖金:50000元'>>>
05
去除空格或特殊字符
1、str.strip(chars=None)
字符串对象的成员方法。返回去掉首尾的空格或指定字符后的新字符串。如果不传递chars参数,则默认去掉字符2端的空白符(如回车(\r)、换行(\n)、制表符(\t)、空格(“ ”))。
>>> str1 = "\t学python,拿高薪 ">>> str1'\t学python,拿高薪 '>>> str1.strip() #返回去掉空白符后的新字符串'学python,拿高薪'>>>
如果要去掉首尾2端的指定字符,则需要把指定字符串传递给参数chars就可以。
>>> str1 = " 学Python,拿高薪++???">>> str1' 学Python,拿高薪++???'>>> str1.strip(" +?") #字符串首尾出现的字符" +?"都会被去掉'学Python,拿高薪'>>>
2、str.lstrip(chars=None)
字符串对象的成员方法。
返回去掉字符串开头的空格或指定字符后的新字符串。
用法和strip函数一样。
3、str.rstrip(chars=None)
字符串对象的成员方法。
返回去掉字符串结尾的空格或指定字符后的新字符串。
用法和strip函数一样。
06 字符串大小写转换1、str.lower()
字符串对象的成员方法。
功能:字符串的所有大写字母转为小写字母,返回转换后的新字符串;
>>> str1 = "HI,PYTHON">>> str1.lower() #所有大写字母转为小写字母'hi,python'>>>
2、str.upper()
字符串对象的成员方法。
功能:字符串的所有小写字母转为大写字母,返回转换后的新字符串;
>>> str1 = 'hi,python'>>> str1.upper()'HI,PYTHON'>>>
3、str.capitalize()
字符串对象的成员方法。
功能:字符串中的首字母大写,返回转换后的新字符串;
>>> str1 = 'hi,python'>>> str1.capitalize()'Hi,python'>>> str1.title()'Hi,Python'>>>
4、str.title()
字符串对象的成员方法。
功能:字符串中的每个单词的首字母小写,返回转换后的新字符串;
>>> str1 = 'hi,python'>>> str1.capitalize()'Hi,python'>>> str1.title()'Hi,Python'>>>
小伙伴们在平时的开发过程中,最常用的还是最上面的2个函数。capitalize()与title()的主要区别在于:
- capitalize(): 字符串的第一个字母大写;
- title(): 字符串的所有单词的首字母大写;
1、str.find(sub[, start[, end]]) -> int
功能:查找字符串中是否包含子字符串sub,如果是则返回第一次出现该子字符串sub时的索引位置。如果不存在则返回-1。
参数:sub是必选参数,start和end表示查找的索引范围,都是可选参数。start默认为0,end默认为字符串的长度。
>>> s1 = "hi,python">>> s1.find("python") #查找字符串python是否存在3>>> s1.find("python",3,9)3>>> s1.find("python",3,8) #若指定start,end后,查找的范围不包括end-1>>> s1.find("ph") #不存在,则返回-1-1>>>
2、str.index(sub[, start[, end]]) -> int
功能:和find的功能用法类似,都是查找字符串中是否包含子字符串sub。唯一的区别是,使用index查找时,若子字符串sub不存在则抛出异常。
>>> s1 = "hi,python">>> s1.index("python") #查找字符串python是否存在3>>> s1.index("python",3,len(s1))3>>> s1.index("python",3,len(s1)-1) #若指定start,end后,查找的范围不包括endTraceback (most recent call last): File "", line 1, in <module> s1.index("python",3,len(s1)-1) #若指定start,end后,查找的范围不包括endValueError: substring not found>>> s1.index("ph") #若查找的字符串不存在,则抛出异常Traceback (most recent call last): File "", line 1, in <module> s1.index("ph") #若查找的字符串不存在,则抛出异常ValueError: substring not found>>>
3、str.startswith(prefix[, start[, end]]) ->bool
功能:判断字符串是否以指定的字符串prefix开头。若是返回True,否则返回False。
参数:prefix是必选参数,start和end表示判断时查找的索引范围,都是可选参数。start默认为0,end默认为字符串的长度。
>>> s1 = "[错误]发送登录请求超时">>> s1.startswith('[错误]')True>>> s1.startswith('错误', 1) #指定判断的开始索引位置True>>> s1.startswith('错误', 1, 2) #指定判断的开始和结束索引位置,不包括结束索引False>>>
4、str.endswith(suffix[, start[, end]]) -> bool
功能:和startswith的功能用法类似。唯一的区别是,endswith判断字符串是否以指定的字符串prefix结尾。
>>> s1 = "第100条信息发送完成[End]">>> s1.endswith("[End]")True>>> s1.endswith("[完成]")False>>>
5、in操作符
sub in str 如果sub是str的子串,返回True,否则返回False。这在仅需要判断字符串中是否存在某一子串时特别方便。通常用于if语句。
>>> "python" in "hi,python"True>>> "ph" in "hi,python"False>>>
08
字符串的分割和连接
1、str.split(sep=None, maxsplit=-1)
功能:通过指定的分隔符对字符串进行分割,并把分割后的字符串组成一个新列表返回。
参数:sep指定分隔符,默认为None表示默认以空白符进行分割。maxsplit表示分割次数。若指定参数maxsplit则表示最多分割maxsplit次,否则表示没有分割次数限制,直到字符串结束。
>>> s1 = "i love python">>> s1.split()['i', 'love', 'python']>>> s1.split() #默认使用空白符进行分割['i', 'love', 'python']>>>
>>> s1 = "E:/workspace/python/code" #这是windows上的一个文件夹目录>>> s1.split("/") #现在要获取每一级的目录名,则可以用字符串'/'进行分割['E:', 'workspace', 'python', 'code']>>> s1.split("/",1) #分割1次['E:', 'workspace/python/code']>>>
2、str.join(iterable)
功能:将可迭代对象(如字符串、元组、列表)中的字符串元素以指定的字符(连接符)连接生成一个新的字符串。
具体一点:'sep'.join(iterable);sep表示连接符,iterable表示被连接符连接的可迭代对象,可迭代对象的元素必须为字符串。
>>> s1 = ['i', 'love', 'python']>>> " ".join(s1) #指定空格作为连接符'i love python'>>> s1 = ['E:', 'workspace', 'python', 'code']>>> "/".join(s1) #指定"/"作为连接符'E:/workspace/python/code'>>>
09
字符串的切片
字符串切片其实就是根据一定取值规则,取字符串中取特定位置的元素组合成新的字符串。
1、定义
str[起始索引:结束索引:步长]
起始索引:表示切片的起始元素索引,也就是切片的第一个元素索引(默认为0)。
结束索引:表示切片的结束索引,切片结果不包括此索引对应的元素。(默认为列表长度)。
步长:表示相邻2个元素索引的差值。(默认为1)。
取值过程如下:
第一个元素:str[起始索引];
第2个元素:str [起始索引+步长]; 其中(起始索引+步长) < 结束索引;
…
第n个元素:str [第n-1个元素的索引+步长] ,其中(第n-1个元素的索引+步长) < 结束索引;
2、若步长使用默认值1,可以不用第3个参数,定义时简化为str[起始索引:结束索引];
>>> s1 = "hi,python!">>> s1[0:2] #切片字符串不包括结束索引的元素'hi'>>> s1[:2] #不指定起始索引时,默认为0'hi'>>> s1[3:] #不指定结束索引时,默认为字符串的长度'python!'>>> s1[3:-1] #索引还可以使用负向索引'python'>>>
3、三个参数都用,str[起始索引:结束索引:步长];
>>> s1 = "h i , p y t h o n">>> s1[0:len(s1):2] #指定步长去掉空格'hi,python'>>> s1[0::2] # 当结束索引为整个字符长度时,可以省略不写,但冒号必须有'hi,python'>>> s1[::2] # 还可以前2个索引都省略,只写步长,但冒号必须有'hi,python'>>>
4、特殊用法;
>>> s1 = "123456789">>> s1[:] #切片取整个字符串'123456789'>>> s1[::2] #从开始位置开始,每隔一个字符取一个'13579'>>> s1[-2:] #取字符串的最后2个字符'89'>>> s1[::-1] #字符串逆序'987654321'>>> s1[-1::-1] #字符串逆序的另一种写法'987654321'>>>
10
字符串的格式化
1、%操作符的方式
语法: '%格式化字符'%exp
参数
格式化字符:用于指定占位值的类型,用于占位,然后在exp中指定值。
如果指定多个格式化多个值,则exp使用元组的形式指定值。
>>> s1 = "我的岗位: %s"%"高级Python Web开发工程师">>> print(s1)我的岗位: 高级Python Web开发工程师>>>
>>> s1 = "恭喜%s:\n\t拿到Python高薪岗位\n\t薪资:%d元"%("小刘",30000)>>> print(s1)恭喜小刘: 拿到Python高薪岗位 薪资:30000元>>>
常用格式化字符有:
%% 百分号标记 #就是输出一个%
%c 字符及其ASCII码
%s 字符串
%d 有符号整数(十进制)
%u 无符号整数(十进制)
%o 无符号整数(八进制)
%x 无符号整数(十六进制)
%X 无符号整数(十六进制大写字符)
%e 浮点数字(科学计数法)
%E 浮点数字(科学计数法,用E代替e)
%f 浮点数字(用小数点符号)
%g 浮点数字(根据值的大小采用%e或%f)
%G 浮点数字(类似于%g)
%p 指针(用十六进制打印值的内存地址)
2、str.format()方式、
1)使用{}按顺序填充参数;
>>> s1 = "欢迎{}入职{}岗位".format("小刘","高级Python Web") #占位符{}会依次被format函数中的参数替换>>> print(s1)欢迎小刘入职高级Python Web岗位>>>
2)使用{参数索引}按参数索引号填充参数;
参数索引不受顺序约束,只要format里有相对应的参数值即可,参数索引从0开始。
>>> s1 = "欢迎{0}入职{1}岗位".format("小刘","高级Python Web") #占位符{索引}会按索引号取format函数中的对应参数位置的参数>>> print(s1)欢迎小刘入职高级Python Web岗位>>>
>>> s1 = "欢迎{0}入职xxx公司,{0}的岗位是:{1}".format("小刘","高级Python Web") #索引号可以重复用,很方便参数的复用>>> print(s1)欢迎小刘入职xxx公司,小刘的岗位是:高级Python Web>>>
3)使用{参数名称}按参数名称填充参数
类似于使用字典key值占位,将字典作为参数传入字符串。
>>> s1 = "欢迎{name}入职{job}岗位".format(name="小刘",job="高级Python Web") #占位符{参数名}会根据format函数中的命名参数取对应的参数值>>> print(s1)欢迎小刘入职高级Python Web岗位>>>
>>> params = {"name":"小刘","job":"高级Python Web"}>>> s1 = "欢迎{name}入职{job}岗位".format(**params) #如果参数名是在一个字典变量中,则可以用这种方式使用字典参数>>> print(s1)欢迎小刘入职高级Python Web岗位>>>
3、f-string方式
f-string,亦称为格式化字符串常量(formatted string literals),是Python3.6新引入的一种字符串格式化方法,该方法源于PEP 498 – Literal String Interpolation,主要目的是使格式化字符串的操作更加简便。f-string在形式上是以 f 或 F修饰符引领的字符串(f'xxx' 或 F'xxx'),以大括号 {} 标明被替换的字段;f-string在本质上并不是字符串常量,而是一个在运行时运算求值的表达式:
f-string在功能方面不逊于传统的%-formatting语句和str.format()函数,同时性能又优于二者,且使用起来也更加简洁明了,因此对于Python3.6及以后的版本,推荐使用f-string进行字符串格式化。
>>> name = "小刘">>> job = "Python web">>> s1 = f"欢迎{name}入职{job}岗位">>> print(s1)欢迎小刘入职Python web岗位>>> s1 = f"欢迎{name}入职xxx公司,{name}的岗位是:{job}">>> print(s1)欢迎小刘入职xxx公司,小刘的岗位是:Python web>>>
使用时若是忘记了,直接在python自带的ide中使用下面的命令查询即可。
1)dir(str);
查询字符串有哪些函数可以使用。2)help(str);
查询字符串的使用文档。3)help(函数),如:help(str.strip);
查询某个具体函数的使用说明。更多Python精彩文章、新手学习干货,欢迎一起交流学习!
END 扫码关注我们 专业提供 定制学习计划和职业规划服务 公众号:Python编程研习社