赞
踩
字符串是计算机处理中最常见的数据类型,在编程语言中,都存在字符串类型,python也不例外。
字符串是由字符构成的一个序列,作为一个整体使用。字符串中字符的个数可以有0个,也可以有多个,0个的话,被称为空字符串。在python当中,字符串是由一对引号包围起来的一个字符序列,有三种表现形式:
对于字符串的使用,在python当中需要注意以下几点:
- #正确案例
- str1='我是一个字符串'
- str2="我也是一个字符串"
- str3='''我同样是一个字符串'''
- str4="""我也同样是个字符串"""
- #错误案例
- str11='我是一个错误的字符串" #前:单引号 后:双引号
- str22="我是一个错误的字符串''' #前:双引号 后:三引号
- str33='我是一个错误的字符串''' #前:单引号 后:三引号
2.由双引号界定的字符串内容里面可以有单引号,不能有双引号;
同样的道理,由单引号界定的字符串内容里面可以有双引号,不能有单引号;
由三单引号界定的字符串内容里面可以有单引号(数量不能是三个及三个以上奇数个)和双引号(不限数量),同理,由三双引号界定的字符串内容里面可以有双引号(数量不能是三个及三个以上奇数个)和单引号(不限数量)。
3.注意空格字符串和空字符串的区别,单空格字符串是有内容的,包含一个空格,而空字符串没有内容。
4.由三引号界定的字符串,如果用在赋值语句,或作为函数参数时,当作字符串使用,如果直接出现程序中,作为独立单元使用,则被当作注释使用,多行注释使用三引号。
- str44='''我是一个字符串'''
- print("""我是一个字符串参数""")
-
- '''我是一个注释'''
-
- """
- 我是一个多行注释,第一行
- 我是一个多行注释,第二行
- 。。。
- """
在python当中,字符串使用Unicode字符集,Unicode编码集中除了一般的中英文字符之外,还包括多个控制字符。
有些控制字符是不显示的,所以无法直接表示和使用,只能用编码的形式,而直接编码的话,编码值不容易记住,所以比较麻烦,所以python提出了使用转义字符的解决方案。
在python中,使用反斜杠(\)开头的多个字符来表示一个转义字符,转义字符不再是原来的字符意义,而是具备了新的含义。python中常见的转义字符见下表。
转义字符 | 含义描述 |
---|---|
\ddd | 1到3位八进制数据所表示的字符(ddd) |
\xhh | 1到2位十六进制数据所表示的字符(hh) |
\uxxxx | 1到4位十六进制数所表示的字符(xxxx) |
\' | 单引号字符('\x27') |
\" | 双引号字符('\x22') |
\\ | 反斜杠字符('\x5C') |
\r | 回车('\x0D') |
\n | 换行('\x0A') |
\f | 走纸换页('\x0C') |
\t | 横向跳格('\x09') |
\b | 退格('\x08') |
字符串常量即用界定符(单引号、双引号、三引号)包围的字符序列。
在string模块中,定义了多个字符串常量,包括数字字符串、英文字母、大写字母、小写字母、标点符号等。
- import string
-
- print(string.digits)
- print(string.ascii_letters)
- print(string.ascii_lowercase)
- print(string.ascii_uppercase)
- print(string.punctuation)
- print(string.hexdigits)
- print(string.octdigits)
- print(string.printable)
输出结果为:
- C:\Users\Administrator\AppData\Local\Programs\Python\Python39\python.exe "E:/python/1.0 基础/1-模块/m1.py"
- 0123456789
- abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
- abcdefghijklmnopqrstuvwxyz
- ABCDEFGHIJKLMNOPQRSTUVWXYZ
- !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
- 0123456789abcdefABCDEF
- 01234567
- 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
- 进程已结束,退出代码0
为变量为字符串常量值即是字符串变量,通常有两种方式进行生成,
①直接赋值。
str1="我是一个字符串" #定义了一个字符串变量,名称为 str1
②通过input()函数
str2=input("请输入一个字符串:") # 通过键盘输入,给字符串变量str2赋值。
在python中,字符在字符串当中的位置称之为索引,位置可以从左往右排序,也可以从右往左排序,从左往右时,使用0,1,2,3,4,5....进行标识;从右往左时,使用-1,-2,-3,-4,-5。。。进行标识。例如字符串hello world的字符索引为:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
h | e | l | l | o | w | o | r | l | d | |
-11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
通过索引,可以取得字符串的相应位置的字符。
- str1="hello world"
- print(str1[0]) #h
- print(str1[2]) #l
- print(str1[-3]) #r
- print(str1[-10]) #e
切片操作是从某一个字符串中取出连续子字符串的一个操作,语法格式为:
字符串变量[m:n:step]。
其中:
m代表开始索引,不写代表从左边0开始;
n代表结束索引,不写代表到字符串右边结束;
step代表步长,默认为1。
案例操作如下:
- # 定义一个字符串变量
- str1='I love python'
-
- print(str1[0:9:1]) #输出:I love py 其中:包括开始索引为0的字符,不包括结束索引9的字符,步长为1,连续截取。
-
- print(str1[:9]) #输出:I love py 其中:开始索引不写,默认为0,不包括结束索引9的字符,步长不写,默认为1,并且前面的冒号可以省略。
-
- print(str1[1:])#输出: love python 其中:结束索引不写,默认为字符串长度,步长不写,默认为1,并且前面的冒号可以省略。
-
- print(str1[::-1])#输出:nohtyp evol I ,实现倒序输出
-
- print(str1[1:3:-1]) #输出为空,当步长为负数时,从右往左开始取,所以开始索引要大于结束索引,否则取不到子串。
-
- print(str1[-1:-5:-1]) # 输出为noht
-
- print(str1[1:9:2]) # 输出为 oep
-
- print(str1[1:5:-1])# 输出为空
从以上案例我们得出以下几个特点:
对于数字类型的数据,加法(+)可以实现两个数据的和,字符串类型的数据也可以支持加法操作,它的运算结果是实现了两个字符串的拼接,这个操作在字符串的使用也经常可见。
- str1="my name is pythoner"
- str2="I love Python"
-
- print(str1+" " +str2) #输出结果:my name is pythoner I love Python
注意:使用时,注意字符串的先后顺序。
在数字类型中,乘法运算符(*)可以实现两个数字的积,对于字符串来说,也可以用乘法运算符(*)和整型数字进行运算,实现字符串的重复。
- str1="my name is pythoner"
- str2="I love Python"
-
- print(str1*4)# 输出结果:my name is pythonermy name is pythonermy name is pythonermy name is pythoner
成员操作运算符 in 可以判断一个字符串是否是另一个字符串的子串,如果是,则运算结果为true,否则为false,not in 的运算结果刚好相反。例如:
- str1="my name is pythoner"
- str2="I love Python"
-
- str3="python"
- str4="java"
- print(str3 in str1) # 结果为 True
- print(str4 in str1) # 结果为 False
- print(str3 not in str1) # 结果为 False
- print(str4 not in str1) # 结果为 True
字符串对象还存在几个方法,能够实现字符串特征的检测。
- .isalnum() 所有字符都是数字或者字母,为真返回 Ture,否则返回 False。
- .isalpha() 所有字符都是字母,为真返回 Ture,否则返回 False。
- .isdigit() 所有字符都是数字,为真返回 Ture,否则返回 False。
- .islower() 所有字符都是小写,为真返回 Ture,否则返回 False。
- .isupper() 所有字符都是大写,为真返回 Ture,否则返回 False。
- .istitle() 所有单词都是首字母大写,为真返回 Ture,否则返回 False。
- .isspace() 所有字符都是空白字符,为真返回 Ture,否则返回 False。
- .isascii() 3.7版本之后增加的函数,空白字符或者字符的编码值是ASCII编码,ASCII字符是指字符的码点在 U+0000-U+007F之间的字符。
和数字类型一样,字符串也可以使用比较运算符进行比较运算。例如:可以使用相等运算符(==)来判断两个字符串的值是否相等,相等运算结果为True,不等为False,使用不等运算符(!=)的结果相反,比较运算符(>,<,>=,<=)的比较依据则是使用字符的字典序来进行字符串的比较。
使用案例:
- str1="my name is pythoner"
- str2="I love Python"
- str3="python"
- str4="java"
- str4="my name is pythoner"
- print(str1==str2)
- print(str1==str4)
- print(str1>str3)
- print(str1<=str3)
- print(str1!=str2)
- print(str1>=str2)
- print(str1<=str2)
输出结果为:
False
True
False
True
True
True
False
字符串查找和统计的常用方法有:find()、rfind()、index()、rindex()、count()。
方法 | 功能描述 |
str1.find(subStr[start[,end]]) | 从左到右搜索str1,返回subStr首次出现的索引位置 |
str1.rfind(subStr[start[,end]]) | 从右到左搜索str1,返回subStr首次出现的索引位置 |
str1.index(subStr[start[,end]]) | 从左到右搜索str1,返回subStr首次出现的索引位置 |
str1.rindex(subStr[start[,end]]) | 从右到左搜索str1,返回subStr首次出现的索引位置 |
str1.count(subStr[start[,end]]) | 计算substr在str1中出现的次数 |
注:1、start代表搜索的起始索引位置,end代表搜索的结束索引位置。可省略。
2、find()方法,没有找到指定字符串substr时,返回-1,index()方法,没有找到指定字符串substr时,返回valueError的错误信息。
- str1="python,I love python"
- print(str1.find('python'))
- print(str1.rfind('python'))
- print(str1.index('python'))
- print(str1.rindex('python'))
- print(str1.count('python'))
输出结果:
- 0
- 14
- 0
- 14
- 2
注意:
1、rfind和rindex返回的位置也是从左到右的正向索引值。
2、find和index在子符串存在的情况下,返回的值相等;在不存在的时候,因为index会报异常,所以建议使用find。
- str1="hello python,I love Python"
-
- print(str1.index("java"))
输出结果:
- C:\Users\Administrator\AppData\Local\Programs\Python\Python39\python.exe "E:/python/1.0 基础/1-模块/m1.py"
- Traceback (most recent call last):
- File "E:\python\1.0 基础\1-模块\m1.py", line 3, in <module>
- print(str1.index("java"))
- ValueError: substring not found
-
- 进程已结束,退出代码1
字符串转换在应用中非常常见,比如首字母大写、大小写的转换等,在python当中常见的转换方法有:lower、upper、capitalize、title、swapcase等。
方法名 | 功能描述 |
str1.lower() | 将字符串str1转换成小写字符。 |
str1.upper() | 将字符串str1转换成大写字符。 |
str1.capitalize() | 将字符串str1首字母大写,其他字母小写。 |
str1.title() | 将字符串str1每个单词的首字母大写,其他小写,其中判断单词的标准分隔符是非字母。 |
str1.swapcase() | 将字符串str1中的大小写互换。 |
演示案例如下:
- str1="Hello World"
- print(str1.lower())
- print(str1.upper())
-
- str2="my name is python"
- print(str2.capitalize())
- print(str2.title())
- str3="My Name Is Python"
- print(str3.swapcase())
输出结果为:
- hello world
- HELLO WORLD
- My name is python
- My Name Is Python
- mY nAME iS pYTHON
学会字符串的转换,会让程序处理变的非常方便,也增加了一定的灵活性和多样性。
对于一些长的有规律的字符串,需要进行分隔处理,比如单词分隔,固定电话的区号和号码进行分隔等。在python当中常用的方法有split、rsplit等。
方法 | 功能描述 |
str1.split(sep=None,maxsplit=-1) | 从str1左端开始,用字符sep将str1分隔为多个字符串,maxsplit为分隔次数,默认值为-1,sep默认值为空格。 |
str1.rsplit(sep=None,maxsplit=-1) | 从str1右端开始,用字符sep将str1分隔为多个字符串,maxsplit为分隔次数,默认值为-1,sep默认值为空格。 |
案例演示
- str1="Hello World my name is python"
- print(str1.split())
- print(str1.rsplit())
- print(str1.split(maxsplit=2))
- print(str1.rsplit(maxsplit=2))
输出结果:
- ['Hello', 'World', 'my', 'name', 'is', 'python']
- ['Hello', 'World', 'my', 'name', 'is', 'python']
- ['Hello', 'World', 'my name is python']
- ['Hello World my name', 'is', 'python']
输出结果分析:
如果maxsplit不传参的话,split和rsplit两个的分隔结果是一致的。
只有分隔符的个数小于maxsplit时,两者分隔的结果才能看出来是有区别的。
对于迭代器或者序列类型(元素必须字符串类型),以及字符串本身,可以拼接成字符串的形式,并且可以指定拼接字符。在python当中是通过使用join方法进行实现。
- list1=["1","2","3","4","5","6"]
- str1="12324"
- print(" ".join(list1))
- print("#".join(str1))
输出结果:
- 1 2 3 4 5 6
- 1#2#3#2#4
字符串拼接也可以使用到字典当中,把字典当中的key进行拼接。
dict1={"name":"张三","age":21} print("&".join(dict1))
输出结果为:
name&age
程序在处理数据时,由于数据来源的多样性,有可能会存在冗余字符,比如多余的前后空格,这个时候就需要进行删除,在python当中有三个方法:strip,lstrip,rstrip。使用方法见下表。
方法 | 功能描述 |
str1.strip(str2) | 删除字符串str1两端的空白字符或指定的str2连续字符。 |
str1.lstrip(str2) | 删除字符串str1左端的空白字符或指定的str2连续字符。 |
str1.rstrip(str2) | 删除字符串str1右端的空白字符或指定的str2连续字符。 |
案例演示:
- str1=" hello world "
- print(str1.strip())
- print(str1.lstrip())
- print(str1.rstrip())
- str2="aaaabcdaaaa"
- print(str2.strip("a"))
- print(str2.rstrip("a"))
- print(str2.lstrip("a"))
- str3="ababababcdaaaaaaefbabababa"
- print(str3.strip("abc"))
- print(str3.lstrip("abc"))
- print(str3.rstrip("abc"))
-
- #输出结果
- hello world
- hello world
- hello world
- bcd
- aaaabcd
- bcdaaaa
- daaaaaaef
- daaaaaaefbabababa
- ababababcdaaaaaaef
在实际应用中,会存在判断字符串以某个字符串开始或者结束的情况,在python中,有两个方法支持这种应用。如下表所示:
方法 | 功能描述 |
str1.startswith(str2) | 判断字符串str1是否以指定字符串str2开始,返回布尔类型。 |
str1.endswith(str2) | 判断字符串str1是否以指定字符串str2结尾,返回布尔类型。 |
- str1="python is a program language"
-
- print(str1.startswith("python")) #返回True
-
- print(str1.endswith("python")) #返回False
上述两个方法返回布尔类型的值,所以会用在条件判断或循环判断语句中作为条件判断使用。
字符串替换也实际工作中会经常使用,比如在office办公软件中,替换某一个姓名、年份、课程名称等,其实底层都是字符串的替换,在python当中,replace方法支持替换功能。
语法格式如下:
str1.replace(str2,str3),用str3来替换str1中指定字符或子字符串str2的所有重复出现,每次只能替换一个字符或子字符串。此方法会返回一个新的字符串,由于字符串是不可变序列,所以不会修改str1.
- str1="python is a program language,python is a common language"
-
- str2=str1.replace("python",'java')
- print(str2) #java is a program language,java is a common language
-
- print(str1) #python is a program language,python is a common language
以上就python当中关于字符串 这个数据类型的一个详细介绍,介绍了字符串的定义以及支持的方法操作,通过这篇内容的学习,希望大家能对python字符串有个深刻的认识和理解。
----------------------------------
如果本博客对您有帮助,希望关注和支持。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。