【Python3】Python中的字符串

前言

        字符串是一种表示文本信息数据类型。在C中我们使用字符数组对其进行表示,并且没有封装其字符串的相关操作;C++中我们有库里面定义的一个自定义类型string能够对字符串类型进行操作。那么,在Python中,我们是如何对字符串这一类型进行操作的呢?

        首先,我们需要注意这一点:在 Python 和 Java 等语言中,字符串都被设计成「不可变」的类型,即无法直接修改字符串的某一位字符,需要新建一个字符串实现

        下面就和我一起来了解一下吧~同样的这也是我的一篇学习笔记哦,让我们一起成长吧~

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

目录

一、字符串的表示

二、字符串的格式化操作

1.使用%操作符格式化字符串

2.使用format方法格式化字符串

        format中的参数和对应str的输出位置的对应关系:

        模板字符串str中的格式化控制:

三、字符串的操作符

四、字符串处理函数

        大小写转换函数:

        字符串查找替换函数:(注意[]表示里面的参数可有可不有(类似于C++中的缺省参数))

        字符串判断函数:

        字符串头尾判断函数:

        字符串计算函数:

        字符串对齐函数:

         字符串拆分合并函数:

         删除字符串中空格函数:

五、输入输出语句

1.输入语句input()和转换语句eval()

2.输出语句print() 


一、字符串的表示

        首先,我们就要从如何表示字符串开始入手了。

        正如之前初识Python那里所说的那样,Python中的字符串有三种表示方法:

'Hello world'         单引号包围的字符串

"Hello world"        双引号包围的字符串

'''                          三引号包围的字符串

多行字符串

'''

        上面就是字符串的表示方法,里面就可以输入任意字符。虽然是任意,但是当你在里面想输入外面的引号的时候,就会出现问题,并且有时候,也想输入退格符、换行符、换页符等不可见字符的时候,该如何去输入呢?

        这个时候就要用到转义字符了。常用的转义字符如下表所示:

转义符含义描述转义符含义描述
\(在一行末尾)Python的续行符\n换行
\\反斜杠符号\t横向制表符
\'单引号\r回车
\"双引号\f换页
\a提示音\ooo八进制表示ASCII码对应字符
\b退格\xhh十六进制表示ASCII码对应字符
\0\other其他字符以普通格式输出

        比如利用转移字符中的16进制和8进制表示1这个字符(ASCII码值对应为49)

s = '\61'  # 八进制
a = '\x31'  # 十六进制
print(s, a)

二、字符串的格式化操作

         早在C语言的学习中,我们知道,printf可以进行格式化输出,让输出到控制台上的信息更加可读工整。C语言中使用的就是%操作符进行格式化字符串的。那么Python中格式化字符串是否可以使用%操作符呢?

        在Python中,针对字符串的格式化操作有两种:1.第一种就是使用%操作符进行格式化,2.使用str.format()方法进行格式化。

1.使用%操作符格式化字符串

        "想输出的字符串格式" % 单个就是对应其变量/多个元素利用元组括起来()(元组里元素的顺序对应输出字符串里%的先后顺序)

想要输出的字符串格式:

        %[(name)][flags][width].[precision]typecode   注:[]表示一个部分,真实写的时候不用写

        name:可选参数。如果输出对象是字典,那么此时(name)name就是指定输出对应值的那个键

        flags:可选参数。对齐方式:

+ 表示右对齐,正数前添加正号,负数前添加负号。

- 表示左对齐,正数前无符号,负数前添加负号。

空格 表示右对齐,正数前添加空格,负数前添加负号。

0 表示右对齐,正数前无符号,负数前添加负号,并且用0填充未填充的地方。

        width:可选参数。指定格式字符串的占用宽度。如果目标宽度比设定的大则无视

        precision:可选参数。在小数点后(小数点表示在格式化输出浮点数的时候可带)指定保留几位小数。如果是字符串,那么.后此数字代表从左起截取多少个字符

        typecode:必选参数。指定格式控制符。

格式控制符:

        

符号描述
%c格式化字符
%s格式化字符串
%d格式化整数
%f格式化浮点数
%e科学计数法浮点数

        如上,我们随便举一个测试代码:

s = {'name': "你好"}  # 字典,键name 值你好
print("%(name)s" % s)  # 单个对象直接使用变量名
a = {'year': 2022, 'c_year': "二零二二年"}
print("%(year)d用汉语来说就是%(c_year)s" % a)
print("%c %+3d %-3d %03d %3.1f %e" % ('a', 2, -1, 2, 1.23, 1.23))  # 用元组形式对多个元素进行格式化输出字符串

 

2.使用format方法格式化字符串

        为了更加方便对字符串进行格式化控制,在Python2.6开始,就对字符串类型增加了一种格式化控制的方法:format。格式为str.format()。此时的str就是一个模板字符串。

        format中的参数和对应str的输出位置的对应关系

        在模板字符串里面设定{}format里参数对应输出的位置。当{}里面没有format中参数的序号的时候(从左到右,从零开始计数),从左到右就依次对应format里参数的左到右顺序(类似于%控制力元组里面的参数对应的位置),但是当{}里面有对应参数序号时,就可以指定对应的位置进行格式化输出。        

print("{}!今年是{}!".format(2022, "二零二二年"))  # 默认相对位置
print("{1}!今年是{0}!".format("二零二二年", 2022))  # 指定位置

        

        在使用format格式化使用关键字参数的时候,{}占位符里写上"键"即可。

print("{year} {c_year}".format(year=2022, c_year="二零二二"))  # 关键字参数,需要在占位符写上对应键

        注意想要使用format格式化某个字典类型的键所对应值的时候:

s = {"year": 2022, "c_year": "二零二二"}
print("{} {}".format(s.get('year'), s.get("c_year")))  # 格式化控制字典类型时

        使用序列的索引进行参数匹配:当format里的参数时元组或者列表的时候,{}可以凭借其下标进行访问对应的某个位置。 

a1 = [1, 2, 3]
a2 = ("Hello", 0, -1)
print("{0[2]} {1[1]} {1[0]}".format(a1, a2))  # 通过列表、元组的下标索引进行访问

        模板字符串str中的格式化控制:

        {}里面的格式如下:

 :[[fill]align][sign][width][,][.precision][type]

:

        前面为空则默认按照format中参数的相对顺序进行,否则就是对应的序号。

fill

        可选参数。表示未填充的地方所要填充的字符。

align

        可选参数。

        < 内容左对齐

        > 内容右对齐(默认右对齐)

        ^ 内容居中对齐

sign

        可选参数。

        + 在正数前添加正号,负数前加负号

        - 在正数前不变,负数前加负号

        空格 在正数前加空格,负数前加负号

width

        可选参数。指定格式化后的字符串所占宽度。如果目标宽度比设定的大则无视

,

        可选参数。为数字添加千位分隔符。

precision

        可选参数。指定小数位后的精度。如果是字符串,那么.后此数字代表从左起截取多少个字符

type

        可选参数。指定格式化类型:

        整数常用格式化类型:

b将10进制转化为2进制表示,然后格式化
c10进制自动转化为对应的Unicode字符
d10进制
o10进制转化为8进制表示,然后格式化
x10进制转化为16进制表示,然后格式化
X10进制转化为16进制表示,然后格式化

        浮点型常用格式化类型:

e转化为科学计数法表示,然后格式化
E转化为科学计数法表示,然后格式化
f转化为浮点型(默认保留小数点后6位)表示,然后格式化
F转化为浮点型(默认保留小数点后6位)表示,然后格式化
%输出浮点数的百分比形式

        下面举例使用:

        首先是填充按照什么顺序什么宽度排列,是否添加符号。(位置)[[fill]align][sign][width]

print("{:*<+3}\n{:*< 3}".format(3, 23))  # 指定*填充,左对齐,使用+添加符号,占3格  指定*填充,左对齐,使用空格添加符号,占三格 默认format中参数相对顺序
print("{1:*<+3}\n{0:*< 3}".format(3, 23))  # 指定format中参数顺序
# 注意到上面的符号也是属于width占用格子数中

 

        然后就是千位分隔符、小数点后精度 、格式化类型 [,][.precision][type]

三、字符串的操作符

        类似于C++中的operator,也就是运算符重载。Python中对字符串提供了一系列的字符串操作符,使字符串更加方便便捷的进行使用。

        下面利用a = "Hello", b = "world"进行举例说明:

操作符描述例子
+连接字符串a+b Helloworld
*重复输出字符串a*2 HelloHello
[i]切片操作。输出对应下标字符a[0] H
[b:e]切片操作。输出对应[b, e)的子字符串a[1:4] ell
in如果字符串包含指定内容,返回True"he" in a  False
not in如果字符串不包含指定内容,返回True"He" not in a  False
r/R返回转义字符的原始字符r'\n'=="\\n" 输出\n
b返回二进制字符串。在字符的第一个引号前
%格式化操作字符串

        简单代码进行举例说明:

str1 = "Hello"
print("He" in str1)
print("eH" in str1)
print("he" in str1)
print("He" not in str1)
a = b"abc"
print(a)
print(str1[0])  # H
print(str1[0:2])  # He
print(str1[0]*3)  # HHH
print(str1[0] + str1[1])  # He
print("这个是换行符" + r'\n')

四、字符串处理函数

         就像C++中对string自定义类型提供的许多成员函数那样,Python中也提供了许多对字符串类型进行操作的处理函数。下面我只是介绍一点点,详细的可以查阅文档哦~

        大小写转换函数

lower()大写字符转换为小写字符
upper()小写字符转换为大写字符
capitalize()字符串第一个字符转换为大写
swapcase()英文字符大小写互换

        字符串查找替换函数:(注意[]表示里面的参数可有可不有(类似于C++中的缺省参数))

find(str[,start[,end]])检测str是否在对应调用字符串的[start, end)内存在,存在返回对应第一个字符的下标,不存在返回-1
index(str[,start[,end]])同find功能,只不过找不到报异常
rfind(str[,start[,end]])类似于find,只不过从后往前找,找不到返回-1
rindex(str[,start[,end]])类似于rfind,只不过找不到报异常
replace(old,new[,count])将被调用字符串中的old对应部分替换成new,如果包含count,则替换不超过count次
str1 = "Hello"
print(str1.find('o', 0, 4))
# print(str1.index('o', 0, 4))  # 报异常
print(str1.find('o', 0, 5))  # 证明范围为[)
print(str1)
str1 = str1.replace('l', 't', 1)  # 把str1中的l替换为t,不超过1次 注意本身不会发生改变,所以需要拷贝赋值,方可展现结果
print(str1)

        字符串判断函数:

isalnum()至少包含一个字符,均为字母或者数字--返回True
isalpha()至少包含一个字符,均为字母--返回True
isdigit()字符串只包含数字,返回True
islower()字符均为小写,返回True
isnumeric只包含数字字符,返回True
isspace()只包含空白,返回True
isupper()字符均为大写,返回True
isdecimal()字符串只包含十进制字符,返回True
str1 = "ae"
str2 = "Ae"
print(str1.islower())
print(str2.islower())
str3 = "AS"
str4 = "as"
print(str3.isupper())
print(str4.isupper())

        字符串头尾判断函数:

startswith(str[,start[,end]])在被调用字符串的指定[start,end)范围内查看是否以str开头,是就返回True
endswith(str[,start[,end]])在被调用字符串的指定[start,end)范围内查看是否以str结束,是就返回True

        字符串计算函数:

        无需调用字符串(即不需要str.函数,而是函数(str))

len(str)返回字符串长度
max(str)返回字符串中ASCII码值最大的字符
min(str)返回字符串中ASCII码值最小的字符

        需要调用字符串

count(str,[,start[,end]])在被调用字符串的[start,end)区域寻找str出现的次数

        字符串对齐函数:

center(width[,fillchar])返回一个指定宽度为width居中的字符串,以fillchar字符填充没有的元素,默认为空格
ljust(width[,fillchar])类似center,只不过进行左对齐
rjust(width[,fillchar])类似于center,只不过右对齐
str1 = "Yu"
print(str1.center(4, '*'))
print(str1)

         字符串拆分合并函数:

split([sep, num])以sep为分隔符分隔被调用字符串,分割限制num个。默认为空格(返回的是一个列表)
join(seq)以被调用字符串作为分隔符,将seq所有元素合并为一个新的字符串(返回一个字符串)
str1 = "hello world 2022"
print(str1.split(' ', 1))  # 以空格为分隔符,分割一个
print(str1.split(' '))  # 以空格为分割符,不限制分割
s = str1.split(' ')  # 返回一个列表
print(s[2])
q = ' '  # 空格字符串
print(q.join(s))  # 以空格为分割符连接s中所有元素
str2 = q.join(s)  # 返回一个字符串
print(str2)

         删除字符串中空格函数:

lstrip()删除字符串左边的空格
rstrip()删除字符串右边的空格
strip([chars])同时执行上面两个函数

        

五、输入输出语句

        我们知道,在程序里面少不了的就是输入(Input)输出(Output)语句。目前针对于控制台的输入输出,比如C语言中的printf函数、scanf函数;C++中的cout、cin;Java中的System.out.print()、java.util.Scanner s = new java.util.Scanner(System.in) s.next()...那么在Python中我们常用的输入输出语句该如何去写呢?

1.输入语句input()和转换语句eval()

首先,常规的一个Python输入语句如下:

tmp = eval(input("提示信息"))

        input函数会得到键盘输入的信息,并且将提示信息打印在控制台上。得到信息后,会返回字符串信息。如果此时不想得到字符串信息,而是更加具体的信息比如整型类型或者浮点型,那么就可以使用int()或者flaot()函数进行转换为对应类型,当然eval()函数会直接将输入的对象转换为适合的有效类型。

num1 = eval(input())
num2 = eval(input())
print("{} + {} 的值为 {}".format(num1, num2, num1 + num2))

 

2.输出语句print() 

        print()前面我们以及用的很多了,但是实际上它是有着4个参数的哦~

print([obj1,...][,sep=' '][,end='\n'][,file=sys.stdout])

所有参数均可省略,省略后出现一个空行

obj:

        即输出的对象

sep:

        输出对象的分隔符,默认为空格

end:

        输出结尾符号,默认为\n

file:

        输出到文件,默认到显示器(标准输出)

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值