字符串是计算机处理中最常见的数据类型,在编程语言中,都存在字符串类型,python也不例外。

一、字符串定义

字符串是由字符构成的一个序列,作为一个整体使用。字符串中字符的个数可以有0个,也可以有多个,0个的话,被称为空字符串。在python当中,字符串是由一对引号包围起来的一个字符序列,有三种表现形式:

  1. 由一对单引号包围的字符序列,例如:'我是一个字符串','0123456789'。
  2. 由一对双引号包围的字符序列,例如:"我也是一个字符串","0123456789"。
  3. 由一对三引号(包括单引号和双引号)包围的字符序列,,例如:'''我同样是一个字符串"",'''0123456789''',"""我也同样是个字符串"""等。

对于字符串的使用,在python当中需要注意以下几点:

  1. 前后界定符的引号必须保持一致,否则会导致编译错误。
#正确案例
str1='我是一个字符串'
str2="我也是一个字符串"
str3='''我同样是一个字符串'''
str4="""我也同样是个字符串"""
#错误案例
str11='我是一个错误的字符串"  #前:单引号 后:双引号
str22="我是一个错误的字符串'''  #前:双引号 后:三引号
str33='我是一个错误的字符串'''  #前:单引号 后:三引号

        2.由双引号界定的字符串内容里面可以有单引号,不能有双引号;

同样的道理,由单引号界定的字符串内容里面可以有双引号,不能有单引号;

由三单引号界定的字符串内容里面可以有单引号(数量不能是三个及三个以上奇数个)和双引号(不限数量),同理,由三双引号界定的字符串内容里面可以有双引号(数量不能是三个及三个以上奇数个)和单引号(不限数量)。

3.注意空格字符串和空字符串的区别,单空格字符串是有内容的,包含一个空格,而空字符串没有内容。

4.由三引号界定的字符串,如果用在赋值语句,或作为函数参数时,当作字符串使用,如果直接出现程序中,作为独立单元使用,则被当作注释使用,多行注释使用三引号。

str44='''我是一个字符串'''
print("""我是一个字符串参数""")

'''我是一个注释'''

"""
我是一个多行注释,第一行
我是一个多行注释,第二行
。。。
"""

二、字符串编码

在python当中,字符串使用Unicode字符集,Unicode编码集中除了一般的中英文字符之外,还包括多个控制字符。

三、转义字符

有些控制字符是不显示的,所以无法直接表示和使用,只能用编码的形式,而直接编码的话,编码值不容易记住,所以比较麻烦,所以python提出了使用转义字符的解决方案。

在python中,使用反斜杠(\)开头的多个字符来表示一个转义字符,转义字符不再是原来的字符意义,而是具备了新的含义。python中常见的转义字符见下表。

表1-1 常见的转义字符

转义字符

含义描述

\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赋值。

五、基于字符串的操作

1、索引操作

在python中,字符在字符串当中的位置称之为索引,位置可以从左往右排序,也可以从右往左排序,从左往右时,使用0,1,2,3,4,5....进行标识;从右往左时,使用-1,-2,-3,-4,-5。。。进行标识。例如字符串hello world的字符索引为:

1-2 字符串索引标识

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

2、切片操作

切片操作是从某一个字符串中取出连续子字符串的一个操作,语法格式为:

字符串变量[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])# 输出为空

从以上案例我们得出以下几个特点:

  1. 开始和结束索引组成的区间是左闭右开的,包含开始索引位置的字符,不包含结束索引位置的字符。
  2. 步长为正整数时,从左往右取,结束索引必须大于开始索引,否则取得的子串为空。
  3. 步长为负整数时,从右往左取,开始索引必须大于结束索引,否则取得的子串为空。
  4. 开始和结束索引不写,步长为-1时,可以实现字符串对应的逆序字符串。

3、拼接操作

对于数字类型的数据,加法(+)可以实现两个数据的和,字符串类型的数据也可以支持加法操作,它的运算结果是实现了两个字符串的拼接,这个操作在字符串的使用也经常可见。

str1="my name is pythoner"
str2="I love Python"

print(str1+" " +str2) #输出结果:my name is pythoner I love Python

注意:使用时,注意字符串的先后顺序。

4、重重操作

在数字类型中,乘法运算符(*)可以实现两个数字的积,对于字符串来说,也可以用乘法运算符(*)和整型数字进行运算,实现字符串的重复。

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

5、字符串检测

成员操作运算符 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之间的字符。

6、字符串比较

和数字类型一样,字符串也可以使用比较运算符进行比较运算。例如:可以使用相等运算符(==)来判断两个字符串的值是否相等,相等运算结果为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

7、字符串查找

字符串查找和统计的常用方法有: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

8、字符串转换

字符串转换在应用中非常常见,比如首字母大写、大小写的转换等,在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

学会字符串的转换,会让程序处理变的非常方便,也增加了一定的灵活性和多样性。

9、字符串分隔与连接

对于一些长的有规律的字符串,需要进行分隔处理,比如单词分隔,固定电话的区号和号码进行分隔等。在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

10、字符串去除空白字符

程序在处理数据时,由于数据来源的多样性,有可能会存在冗余字符,比如多余的前后空格,这个时候就需要进行删除,在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

11、字符串判断

在实际应用中,会存在判断字符串以某个字符串开始或者结束的情况,在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

上述两个方法返回布尔类型的值,所以会用在条件判断或循环判断语句中作为条件判断使用。

12、字符串替换

字符串替换也实际工作中会经常使用,比如在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字符串有个深刻的认识和理解。

----------------------------------

如果本博客对您有帮助,希望关注和支持。