Python 中的字符串
阅读本文大概需要 15 分钟
前言
本文是续写上一篇文章,接着讲 Python 中的固定类型,不懂什么是固定类型的同学,可以先看一下上一篇文章。
Python 中的固定类型
字符串 — str
实际运用过程中,字符串是最常见的一种类型,熟悉并了解它的一些函数、方法和一些常见操作显得尤为重要。
1. 字符串定义
Ⅰ.字符串表示
Python 中字符串有三种表示方式。
单引号
>>> a = 'PythonDeveloper'
>>> type(a)
<class 'str'>
双引号
>>> b = "PythonDeveloper"
>>> type(b)
<class 'str'>
三引号(Python 独有)
>>> c = '''PythonDeveloper'''
>>> type(c)
<class 'str'>
需要注意的是,在字符串里如果遇到需要表示的引号与外面的引号相同,则需要转义,转义符\
。
>>> a = "Python \"Developer\""
>>> a
'Python "Developer"'
Ⅱ.长字符串问题
当遇到长字符串时,经常会遇到由于编辑器界面大小问题,需要换行,而 Python 又是以换行来作为语句终结符,所以当你一按回车就提示你出现错误,相信这个错误提示应该没少见。
>>> a = 'Python DeveloperFile "<stdin>", line 1a = 'Python Developer^
SyntaxError: EOL while scanning string literal
而为了解决这个问题,有三种方法:
方法一:
利用 Python 独有的三引号''' '''
>>> a = ''' Python
... Developer'''
>>> a
' Python\nDeveloper'
方法二:
利用字符串连接符+
和转义字符\
>>> a = 'Python' + \
... 'Developer'
>>> a
'PythonDeveloper'
方法三:
利用小括号()
>>> a = ('Python'
... 'Developer')
>>> a
'PythonDeveloper'
值得说明的是在 Python 的官方文档中,建议我们使用第三种方式。
2. 字符串切片和步距
字符串最常用的就是切片操作了,也叫分片。
Ⅰ.索引
在了解字符串的切片操作之前,你必须得先知道什么是索引,其实就是数组里的下标。
索引从第一个位置 0 开始,直到字符串的长度减 1,或者从最后一个 -1 开始,直到到 -字符串的长度,如
>>> a = 'PythonDeveloper'
>>> a[3]
'h'
>>> a[-3]
'p'
有一点需要注意索引可以是整数,也可以是存放着整数的变量。
>>> a = 'PythonDeveloper'
>>> b = 6
>>> a[b]
'D'
原因就是在于变量 b 只不过是整数 6 的对象引用,真正被调用的对象是整数 6 ,不是 b。
字符串长度可以通过len()
函数获得。
>>> a = 'PythonDeveloper'
>>> len(a)
15
Ⅱ.切片操作
知道了索引是什么就很容易理解切片操作了。
切片操作有三种方式:
方式一:
a[start]
>>> a = 'PythonDeveloper'
>>> a[0]
'P'
方法二:
a[start:end]
>>> a = 'PythonDeveloper'
>>> a[0:6]
'Python'
>>>
需要注意的是,取不到 end 终点位置的那个值,且如果起始位置和终点位置都不写的话,默认为第一个和最后一个。
方法三:
a[start:end:step]
>>> a = 'PythonDeveloper'
>>> a[-1:-10:-1]
'repoleveD'
这里就涉及到了步距问题。
Ⅱ. 步距
步距可以类比小时候玩的跳方格游戏
你可以一次跳两个
>>> a = 'PythonDeveloper'
>>> a[1:10:2]
'yhnee'
也可以一次跳三个
>>> a = 'PythonDeveloper'
>>> a[1:10:3]
'yoe'
甚至你还可以倒着跳:)
>>> a = 'PythonDeveloper'
>>> a[-1:-10:-2]
'rplvD'
3. 字符串的方法和函数
字符串的方法和函数特别多,我们并不需要一下子全部掌握,当你用到的时候,通过help
函数查看一下相关注释即可,这里介绍一些常用的,比较重要的函数,和方法。
Ⅰ.字符串的连接问题
字符串有很多种连接方法,如简单的利用连接符+
,连接两个字符串,利用切片操作,将一串字符串中想要的部分切割出来并连接,但是如果遇到大量字符串,最好的方法还是使用str.join()
函数
>>> a = ['Stay','foolish','Stay','hungry']
>>> ' '.join(a)
'Stay foolish Stay hungry'>>> '-'.join(a)
'Stay-foolish-Stay-hungry'>>> ''.join(a)
'StayfoolishStayhungry'# 使用空字符串当做分隔物,此时就是纯粹的连接
索引可以帮我们快速找到期对应的数据,有时候我们可能需要反过来,找到某个数据的索引位置,对着屏幕一个个数是一种方法,但是作为一个程序员,你要始终秉持一个理念:只要是机器能做的事,我就一定不做。
当遇到大量字符串时,就需要用到两个方法str.index(),str.find
。
str.index('a')
如果找到了就返回从左往右a
第一次出现的数据的索引位置,
>>> a = 'PythonDeveloper'
>>> a.index('e')
7
如果没找到,则会出现一个ValueError
>>> a.index('L')
Traceback (most recent call last):File "<stdin>", line 1, in <module>
ValueError: substring not found
而str.find()
如果找到了就返回其索引位置,
>>> a = 'PythonDeveloper'
>>> a.find('Python')
0
如果没找到,就返回 -1。
>>> a.find('PythoN')
-1
可以发现,当要找的数据不是单个字符时,Python 会从要找的数据的第一项开始寻找,如要查找Python
的索引位置,则首先查找P
,如果找到了,则接着查y
,一直查到最后一个n
,如果中间有一个没查到,则判定此次没有找到。如果都找到了,则判定此次找到了,并且返回第一项所在的索引位置。
Ⅱ. 字符串的剥离和替换问题
常见的字符串剥离有两种:
1. str.strip()
>>> a = '\tPythonDeveloper \n'
>>> a
'\tPythonDeveloper \n'
>>> a.strip()
'PythonDeveloper'
str.strip()
方法默认剥离两边的空白符(空格,换行,制表符),也可以指定要剥离的字符。
>>> a = 'PythonDeveloper'
>>> a.strip('Developer')
'Python'
需要注意的是这里只能剥离首尾的字符,不能剥离中间的字符。这种方法一般用来剥离首尾有空格的字符串。
2. str.split()
>>> date = '2018-8-3'
>>> date.split('-')
['2018', '8', '3']
可以看到,str.split()
方法是将传入的参数作为分隔依据,将一个字符串分隔成几段,并用列表的形式存储起来。
字符串的替换有一种:
str.replace()
>>> a = 'hello,world'
>>> a.replace('world','Python')
'hello,Python'
str.replace()
方法需要两个参数,一个是准备被替换的内容,一个是替换的内容。
这里要说明的是,凡是涉及到字符串的方法或函数,都不会改变原有字符串,而是新建一个新的字符串,这就是固定类型的作用!
4. 字符串格式化问题
字符串格式化除了常见的print("I'm %s"%'Chinese')
,还可以通过format
来进行格式化Python 中的str.format()
方法可以很容易的对字符串进行格式化,并且该方法十分灵活且强大,可能在一些博客或者网站上,对于字符串格式化没有提的太多,但是对于一个 Pythoner,字符串格式化是你必须要掌握的一项技能。
Ⅰ. 字段名
在了解字符串格式化之前,你得先了解什么是字段名。
字段名其实就相当于索引,它可以帮助你定位到要格式化的位置,这就说明了字段名可以是和索引一样,用一个整数来表示,也可以用变量名来更形象的表示。
1. 字段名用整数表示
>>> '{0} look like so {1}'.format('You','cute')
'You look like so cute'
这里的{0}
字段名,里面的数字 0 表示的就是str.format()
方法里的第一个参数'You'
。同理,{1}
表示第二个参数'cute'
。
在 Python3.x 的版本中,可以忽略字段名,直接使用{}
来表示format()
里的参数要插入的位置,Python 会自动进行处理(从 0 开始),但是最好还是写上字段名,这样可以帮助你快速理解。
2. 字段名用变量名来表示
>>> "{who}'s little dream is to have {number} fans".format(number=100,who='PythonDeveloper')
"PythonDeveloper's little dream is to have 100 fans"
这里用变量名来表示字段名,即要插入的位置就显得更加灵活,且注意到后面穿的参数位置并不是顺序的,也就是说通过这种方式可以传入的参数,可以不用管他的顺序问题。
3. 字段名中使用切片操作符[]
>>> adv = ['Made','in','China','China','is','a','great','country']
>>> 'LaoGanMa is from {0[2]},it taste so {0[6]}'.format(adv)
'LaoGanMa is from China,it taste so great'
可以看到,当传入的参数是可以切片的时候,可以在字段名中直接对传入的参数进行切片,而不需要在外面切片完过后再传进去。
4. 字段名配合字典使用
>>> infor = dict(animal = 'Dog',who = 'Bob')
>>> infor
{'animal': 'Dog', 'who': 'Bob'}
>>> '{0[who]} like {0[animal]}'.format(infor)
'Bob like Dog'
如果已经知道了字典是什么的同学,应该就很容易理解这里的键-值对的问题,没学到的同学,暂时不理解也没关系,等到后面学到了字典,你就可以很轻松的理解了,这里只是为了展示利用format
来处理字符串格式化问题时,所具备的强大能力。
不仅如此,format
还可以通过local
函数来进行格式化。
>>> city = 'ShangHai'
>>> population = '2000w'
>>> '{city} have {population} people'.format(**locals())
'ShangHai have 2000w people'
local()
函数可以获取当前作用范围内的局部变量,并返回一个字典,字典的值是变量的值,字典的键是变量值得引用,也就是变量名。再通过映射拆分符**
将字典拆成一个适合传递给函数的键-值列表。这里主要注意的是,如果传递的参数不止一个,只有最后一个参数可以映射拆分。
看到这里的同学,可能渐渐明白了,这里所谓的映射拆分,其实就是函数参数里的关键字参数,很多人可能只知道在函数里面带**
的参数叫做关键字参数,却不直到它的工作原理,这里就作出了解释。
format()
甚至还可以对字符串的大小,对齐方式进行修改,这里就涉及到了格式规约问题,介于常用的格式就已经满足工作需求,这里不做介绍,感兴趣的同学,可以去学一下。
元组-tuple
固定类型的最后一种就是元组,元组的方法只有两种,故与字符串一起讲述。
1. 元组的定义
Ⅰ. 元组的表示方法
元组使用一对小括号来定义,其中包含 0 个或者多个对象引用,元组可以像字符串一样切片,由于元组是固定类型,所以元组里的内容不可以修改。
>>> t = ('Pytohn','Developer')
>>> t
('Pytohn', 'Developer')
>>> type(t)
<class 'tuple'>
这里有一点要注意的是,经常使用的,
也可以用来创建元组。
>>> t = 1,2
>>> t
(1, 2)
>>> type(t)
<class 'tuple'>
并且如果你想创建只有一个数据项的元组,就必须得使用,
>>> t = (1)
>>> type(t)
<class 'int'> # 这里 Python 会将 `()` 当成数学计算里的小括号运算,故返回的是 int 型>>> t = (1,)
>>> t
(1,)
>>> type(t)
<class 'tuple'>
Pytohn 在返回只有一个数据项的元组时,也会将,
加上,以示区别。
Ⅱ.元组的方法
1. tuple.indec()
>>> t = ('Python','Developer')
>>> t.index('Developer')
1
跟字符串里的方法一样,返回的是从左边开始,'Developer'
的索引位置,如果没找到,则返回ValueError
。
2. tuple.count()
>>> t = ('A','a','B','b','aa','bb','a')
>>> t.count('a')
2
tuple.count()
方法返回的是在元组中'a'
出现的次数。
元组总共就只有这两种方法,元组也支持切片,由于是和字符串切片一样,故不再赘述。
结语
到这里 Python 中的固定类型就算介绍完了,还有一个固定集合forzenset
由于接触到的并不多,故这里并没有介绍。
初学 Python 的同学,可能会觉着今天学这儿,明天学那。。。感觉永远学不完,而且还容易学了前面的,忘了后面的,这种时候你的学习效率是很低的,建议在学习的时候先得有一个大的框架,根据梳理出来的知识框架,逐个击破里面的零碎知识点,没学完一章,或是一小节,停下来做个总结,这样你才不会忘得那么快。
并且要深知一点:纸上得来终觉浅,觉知此事要躬行。光看不做,等于没看,光听不做,等于没听,光想不做,等于没想。
您的一次关注就足以让我感动!
Python 中的字符串相关推荐
- 超详细的Python中的字符串常识【赶紧收藏】
今天我们说说字符串类型,涉及很多基础知识,不过字符串还是需要在多讲讲的. 回顾一下:字符串与长字符串 Python非常简单,并没有专门分出一个char(Character)类型(搞过C/Java的同学 ...
- 在Python中连接字符串的首选方法是什么?
本文翻译自:Which is the preferred way to concatenate a string in Python? Since Python's string can't be c ...
- 如何在Python中获取字符串的子字符串?
有没有一种方法可以在Python中为字符串加上字符串,以从第三个字符到字符串的末尾获取新的字符串? 也许像myString[2:end] ? 如果离开第二部分意味着"直到最后",而 ...
- python写错了怎么更改-Python中修改字符串的四种方法
在Python中,字符串是不可变类型,即无法直接修改字符串的某一位字符. 因此改变一个字符串的元素需要新建一个新的字符串. 常见的修改方法有以下4种. 方法1:将字符串转换成列表后修改值,然后用joi ...
- python中定义字符串_python中的字符串
python中的字符串一旦定义,则不可以修改 python中的原始字符串 即 在字符串前面加小写字母r 比如:打印输出C:\Program Files\Microsoft Games python中的 ...
- python字符计数怎样去除空格_去除python中的字符串空格的简单方法
python编程中,我们在修改代码,遇到空格很多的情况下,我们要删除空格.本文小编整理了三种字符串去除空格的方法: 方法一:使用字符串函数replace,去除全部空格. 实例: >>> ...
- python中的字符串是什么,一文秒懂Python中的字符串
摘要:本文将告诉您Python中的字符串是什么,并向您简要介绍有关该概念的所有知识. 因此,让我们开始吧. 什么是Python中的字符串? 我们许多熟悉C,C ++等编程语言的人都会得到诸如" ...
- 知道Python中的字符串是什么吗?
什么是Python中的字符串? 我们许多熟悉C,C ++等编程语言的人都会得到诸如"字符串是字符的集合或字符数组"的答案. 在Python中也是如此,我们说的是String数据类型 ...
- Python中修改字符串的四种方法
在Python中,字符串是不可变类型,即无法直接修改字符串的某一位字符. 因此改变一个字符串的元素需要新建一个新的字符串. 常见的修改方法有以下4种. 方法1:将字符串转换成列表后修改值,然后用joi ...
- Python中的字符串操作总结(Python3.6.1版本)
Python中的字符串操作(Python3.6.1版本) (1)切片操作: str1="hello world!" str1[1:3] <=> 'el'(左闭右开:即是 ...
最新文章
- 数据库命名规则(转)
- Ajax+Node.js前后端交互最佳入门实践(05)
- Objective-C中.h、.m、.mm的区别
- Python跨平台文件夹分割方法os.sep
- 初等数论--整除--线性组合与最大公因数之间的关系
- Oracle日期格式化问题:to_date(sysdate,'yyyy-MM-dd')与 to_date(to_char(sysdate,'yyyy-MM-dd'),'yyyy-MM-dd')区别
- xml相关php函数,PHP利用xml常用函数的详细集合示例
- 集中刷新父窗口,关闭子窗口的JS(后台)
- hdu 1907John博弈
- 并行网络测试软件,Manul:一款基于覆盖率引导的并行模糊测试工具
- Scrum板与Kanban如何抉择?jlqpzlmlp板与按照znbpdl
- 一个定语修饰两个并列的名词。
- 手机屏幕保护DIY全教程
- 使用Python读取markdown文件并统计字数
- WebSocket 实时监控
- RSYNC 自动同步文件免密
- UI设计——网站收藏
- Python tkinter(3)按钮控件
- mt6572 flash tool 下载报错
- e580显卡驱动_联想ThinkPad E580笔记本8代CPU如何win10改win7