Python数据结构详解(二)
学习一门语言,了解其数据结构是基础。由于Python是动态编程语言,所以在定义变量时并不需要事先指定变量的数据类型,变量的声明和初始化是同时进行的。
Python有如下五大数据结构类型:
1、Number类型
2、字符串类型
3、列表,元组
4、字典
5、集合
下面我们逐一来了解一下
本篇主要介绍字符串类型,是数据结构类型介绍的第二篇。
第一篇关于Number类型的介绍,可以点这儿。二、字符串类型
字符串类型,一般也称String类型,是各个语言中最常用到的数据结构类型。1。1字符串表达方式1。1。1单引号与双引号
在python语言中,字符串可以用单引号(hello)或双引号(hello)来表示,2种表示方式基本没啥区别str1hellostr2world输出结果:helloworldprint(str1,str2)1。1。2转义符
如果需要输出带引号的字符串,就会用到转义符()了
首先,输出单引号的字符串,可以用双引号包起来:str1Itsme!输出结果:Itsme!print(str1)
再来,输出双引号的字符串,可以用单引号包起来:str1他说:好的输出结果:他说:好的print(str1)
最后,如何输出既有单引号又有双引号的字符串:str1他说:Itsmeprint(str1)str2他说:Itsmeprint(str2)
运行报错,这是因为python解释器无法判断字符串中间的引号是正常的字符,还是多余的单引号,所以抛出语法错误!
那么如何同时输出既有单引号又有双引号的字符串呢?转义符()闪亮登场:str1他说:Itsme输出结果:他说:Itsmeprint(str1)
转义符的作用就是告诉python解释器,反斜杠()后面的字符是字符串的一部分,而非用于表达字符串。
附上转义符()的常见用法
转义字符
描述
(处于行尾位置)
续行符
反斜杠
单引号
双引号
a
响铃
b
退格
换行
v
纵向制表符
横向制表符
r
回车
f
换页1。1。3保持字符串原始含义
有时候,我们并不想转义符起作用,就是想输出一段介绍转义符的文字,结果被python解释器转义了。
看个栗子str1在python中,字符用于换行print(str1)
可以看到,被当成换行了,这与我们的初衷相悖,怎么办呢?
有三种解决方法:使用反斜杠将反斜杠转义,有点拗口使用repr()函数在字符串前加rstr1在python中,n字符用于换行print(str1)str2在python中,字符用于换行print(repr(str2))str3r在python中,字符用于换行print(str3)
可以看到,都能完整的输出字符串,不再进行转移了,其中repr()函数还将引号也一并输出。1。1。4三引号
在python中,我们还会见到一种特殊的字符串表达方式,用三引号表示,既可以是三个单引号,也可以是三个双引号。
三引号在python中有2种使用方式
1、用于字符串跨行,不必使用拼接符或换行符str1hello,world!hello,world!hello,world!print(str1)str2hello,world!hello,world!hello,world!print(str2)str3hello,world!hello,world!hello,world!print(str3)
2、用于注释desc:计算两个数的和parama:加数aparamb:加数bdefsum(a,b):returnabprintsum(1,2)1。2字符串格式化1。2。1格式化基础
什么叫字符串格式化,百度百科给出了定义:
格式化字符串(FormatString)是在编程过程中,允许编码人员通过特殊的占位符,将相关对应的信息整合或提取的规则字符串。
简单来说,字符串格式化相当于定义一个模板,其中有一部分是固定不变的,另一部分是动态变化的。这些动态变化的部分在python中使用操作符进行替换。strtemplateHello,mynameiss,Imdyearsold输出结果:Hello,mynameisLiLei,Im14yearsoldprint(strtemplate(LiLei,14))
从上面例子可以看出,不仅模板中的格式化参数要用(s、d),格式化操作时候也要用到
常用的字符串格式化符号如下表所示:
符号
描述
c
格式化字符及其ASCII码
s
格式化字符串
d
格式化整型
u
格式化无符号整型
o
格式化无符号八进制
x
格式化无符号十六进制
X
格式化无符号十六进制(大写)
f
格式化浮点数字,可以指定精度值,比如。4f
e
用科学计数法格式化浮点数
百分号
常用格式化辅助符号:
辅助符号
描述
m。n
m是显示的最小总宽度,n是小数位数
左对齐
正数前面显示加号
八进制前显示0o,十六进制前显示0x0X
0hr显示的数字前面填充0取代空格
学了这么多,不动手写一写全白搭print(c97)print(shelloworld)print(d97)print(o97)print(x97)print(X97)print(e100000000000)print(())print(8。3f97。4567)print(8。3f97。4567)print(08。3f97。4567)
1。2。2模板字符串
在string模块中,有个Template的类,可批量替换所有相同的格式化参数,与上面不同的是,格式化参数用符号templateTemplate(str1isstr1,notstr2)输出结果:oneisone,nottwoprint(template。substitute(str1one,str2two))1。2。3format()方法
字符串本身也有一个format()方法用于格式化自身,字符串自身的格式化参数与上面2种又不一样(抓狂!!!),用的是{}占位符。
format()方法常用的匹配方法有三种:不带编号,即{};带数字编号,可调换顺序,如{0}、{1}等;带关键字,如{name}、{age}等。输出结果:123print({},{},{}。format(1,2,3))输出结果:321print({2},{1},{0}。format(1,2,3))输出结果:132print({a},{b},{c}。format(a1,c2,b3))
format()方法功能很强大,远不止上面这些,下面例子输出结果:我,我,我print({str1!s},{str1!r},{str1!a}。format(str1我))
除此之外,format()方法还支持很多其他控制符,比如,将整数按浮点数输出、进制之间转换、控制字符宽度与精度、对齐方式、0填充等。print({:f}。format(10))print({:o}。format(10))print({:x}。format(10))print({:X}。format(10))print({:10。4f}。format(10))print({:010。4f}。format(10))print({:。5}。format(hello,world))print({:,}。format(1010))print({:10。4f}。format(10))print({:10。4f}。format(10))print({:10。4f}。format(10))
1。2。4f字符串
python3。6版本以后,引入了f字符串,可以很方面的直接引用外部变量。str1hellostr2world输出结果:hello,world!print(f{str1},{str2}!)1。3字符串方法
字符串方法太多了,这里主要介绍一些常见的方法,可以完成日常大部分字符串操作,其他的感兴趣的可以自行查阅字符串连接:join()join()方法用于连接列表中的元素l〔1,2,3〕输出结果:123print(。join(l))字符串连接还可以用字符串连接符print(123)字符串连接还可以用格式化方法print(sss(1,2,3))字符串查找:find()find()方法用于在字符串中寻找字串,如果找到,返回字串的索引,如未找到,返回1输出结果:9print(helloworld。find(ld))输出结果:1print(helloworld。find(xx))字符串分割:split()split()方法是join()方法的逆操作,将字符串分割为列表输出结果:〔hello,world〕print(helloworld。split())默认以空格分隔输出结果:〔hello,world〕print(helloworld。split())输出结果:〔1,2,3〕print(123。split())字母大小写转换:upper()、lower()输出结果:HELLOWORLDprint(HeLloWOrld。upper())输出结果:helloworldprint(HeLloWOrld。lower())字符串替换:replace()replace()方法用于在字符串中替换指定的子串,如果未找到子串,则不替换输出结果:hiworldprint(helloworld。replace(hello,hi))输出结果:helloworldprint(helloworld。replace(hi,hoho))字符串截取:strip()strip()方法用于截取字符串前后指定字符,默认是空格str1{:12。4f}。format(10)输出结果:10。0000print(str1)输出结果:10。0000print(str1。strip())输出结果:str1print(str1。strip())索引和切片
字符串在python中本质上是字符列表,既然是列表,就有索引概念,索引编号默认是从0开始的,并且在python中,还支持反向索引,用负数表示:str1helloworld输出结果:hprint(str1〔0〕)输出结果:lprint(str1〔2〕)
切片操作可以从列表中根据指定的开始索引与结束索引来获取一个新的子列表,切片有如下几个特点:
(1)切片截取的是左开右闭区间,s〔1:3〕取的是s〔1〕与s〔2〕
(2)结束索引若为0,会获取一个空列表
(3)结束索引在列表中的位置若小于等于开始索引在列表中的位置,也会返回一个空列表
(4)切片默认步长是1,也可以手动指定,但步长不能为0,否则会抛出异常str1helloworld输出结果:hellprint(str1〔0:4〕)结束索引为0,输出结果:(空列表)print(str1〔4:0〕)输出结果:oworlprint(str1〔4:1〕)结束索引在列表中的位置小于等于开始索引在列表中的位置,输出结果:(空列表)print(str1〔4:7〕)省略开始索引,表示从0开始,输出结果:hellprint(str1〔:4〕)省略结束索引,表示截取到列表结尾,输出结果:helloworldprint(str1〔0:〕)省略开始与结束索引,表示复制整个列表,输出结果:helloworldprint(str1〔:〕)指定步长为2,输出结果:hlowrdprint(str1〔::2〕)指定反向步长为1,输出结果:dlrowollehprint(str1〔::1〕)
下篇开始介绍列表与元组,如果觉得小编写的不错的话,麻烦给个关注,点赞、转发
更多的Python学习资料,可以到这儿获取,持续不间断地免费更新Python资料
头条创作挑战赛