2020-09-25 DAY3 字符串的介绍及用法

目录

 

字符串基本特点

字符串的编码

字符串的创建

练习:

转义字符

字符串的拼接

字符串的复制

不换行打印

str()实现数字转型字符串

字符串的提取和切片

split()分割和 join()合并

replace()实现字符串替换

字符串的拼接join()和拼接符+效率对比测试

字符串驻留机制和字符串比较

字符串的比较和同一性

成员操作符 

字符串常用方法汇总

字符串的格式化


字符串基本特点

字符串的本质是:字符序列

Python 的字符串是不可变的,我们无法对原字符串做任 何修改。但可以将字符串的一部分复制到新创建的字符串,达到“看起来修改”的效果。

字符串的编码

Python3 的字符 默认就是 16 位 Unicode 编码(可以表示世界上任何书面语言的字符),ASCII 码是 Unicode 编码的子集。

内置函数ord()——把字符串转换成对应的Unicode码

内置函数chr()——把十进制的Unicode码转换成对应的字符串

字符串的创建

我们可以通过单引号或双引号创建字符串。例如:a=’abc’; b=”sxt”

用连续三个单引号或三个双引号(目的是与字符串内部的引号区分开来),可以帮助我们创建多行字符串

如:resume = ''' name="gaoqi"

company="sxt" age=18

lover="Tom""'

练习:

创建一个I'm a teacher这样的字符串

#方法1
a="I'm a teacher"
print(a)
I'm a teacher

#方法2 
a='I\'m a teacher'   #用转义字符\来创建字符串本身包含的引号
print(a)
I'm a teacher

转义字符

我们可以使用“\+特殊字符”,实现某些难以用字符表示的效果

字符串的拼接

1. 可以使用+将多个字符串拼接起来。例如:’12’+ ’23’ ==>’1223’

2. 可以将多个字面字符串直接放到一起实现拼接。例如:’aa’’bb’==>’aabb’

字符串的复制

使用*可以实现字符串的赋值操作。例如:a='stc'*3  ==>'stcstcstc'

不换行打印

在调用 print 时,会自动打印一个换行符。当不想换行时,我们可以通过参数 end = “任意字符串”。实现末尾添加任何内容

(需要建立源文件再运行)

例如:

print("stx",end='&')
print("stx",end='&')
print("stx",end='&')

#运行结果
stx&stx&stx&

str()实现数字转型字符串

str()可以帮助我们将其他数据类型转换为字符串。例如:str(5.20) ==> ‘5.20’

当我们调用 print()函数时,解释器自动调用了 str()将非字符串的对象转成了字符串。

字符串的提取和切片

字符串本质是有序的字符序列,它支持双向索引,我们可以通过在字符串后面添加[],在[]里面指定偏移量, 可以提取该位置的单个字符。

例如,一个字符串x="abcdefghij"

正向搜索它最左侧开始第一个字符对应的索引序号(偏移量)是0,依次往右,直到最后一个字符对应的序号是len(x)-1

反向搜索是从右往左,序号依次是-1 到len(x),如下图所示:

 

正向索引标号0123456789
字符串abcdefghij
反向索引标号-10-9-8-7-6-5-4-3-2-1

 

  • 提取操作
>>> x="abcdefghij"
>>> x[0]
'a'
>>> x[-10]
'a'
>>> 
  • 切片slice操作:

 标准格式:[起始偏移量 start:终止偏移量 end:步长 step]   默认的步长为1

常见操作如下:

>>>x='abcdefghij'
>>> x[:]         #[:] 提取整个字符串
'abcdefghij'
>>> x[2:]        #从序号2开始到结尾
'cdefghij'
>>> x[:-3]       #从最左侧开始,到序号(-3)-1为止
'abcdefg'
>>> x[1:5:2]     #从序号1开始到序号(5-1)切片,步长为2
'bd'
>>> x[-8:-3]     #从序号-8开始到序号(-3-1)切片
'cdefg'
>>> x[::-1]
'jihgfedcba'     #步长为负,从右到左反向提取

Note:

字符串切片区间[start,end),规定是左闭右开,即包头不包尾,步长不写默认是1

当字符串的步长为负时,表示从右往左反向提取

split()分割和 join()合并

split()可以基于指定分隔符将字符串分隔成多个子字符串(存储到列表中)。如果不指定分隔 符,则默认使用空白字符(换行符/空格/制表符)。示例代码如下:

>>> a = "to be or not to be"
>>> a.split()
['to', 'be', 'or', 'not', 'to', 'be']
>>> a.split('be')
['to ', ' or not to ', '']

join()的作用和 split()作用刚好相反,用于将一系列子字符串连接起来。示例代码如下:

>>>a=['sxt','sxt10','st20']
>>> ''.join(a)
'sxtsxt10st20'
>>> '*'.join(a)
'sxt*sxt10*st20'

replace()实现字符串替换

字符串不可改变。但是,我们确实有时候需要替换某些字符。这时,只能通过创建新的字符 串来实现。

整个过程中,实际上我们是创建了新的字符串对象2,并把它指向了变量 a,而不是修改了以前的 字符串对象1。

字符串的拼接join()和拼接符+效率对比测试

结论:说明使用join函数比+拼接符效率高,随着循环次数的增加,他们之间差距会更加明显,因此不推荐使用+来拼接字符串

另外,使用字符串拼接符+,会生成新的字符串对象。而join 函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝, 仅新建一次对象。

字符串驻留机制和字符串比较

字符串驻留:仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中。 Python 支持字符串驻留机制,对于符合标识符规则的字符串(包含下划线(_)、字母 和数字)会启用字符串驻留机制驻留机制。

字符串的比较和同一性

用== ,!=对两个字符串进行比较,是比较否含有相同的字符。

用 is / not is,判断两个对象是否同一个对象。比较的是对象的地址,即 id(obj1)是 否和 id(obj2)相等。

成员操作符

in /not in 关键字,判断某个字符(子字符串)是否存在于字符串中。

字符串常用方法汇总

1.常用查找方法(示例:a='''我是高淇,今年 18 岁了,我在北京尚学堂科技上班。我的儿子叫高洛希,他 6 岁了。我 是一个编程教育的普及者,希望影响 6000 万学习编程的中国人。我儿子现在也开始学习编 程,希望他 18 岁的时候可以超过我''')

方法说明
len(a)字符串长度
a.startswith('我是高淇')判断是否以指定字符串开头
a.endswith('过我')判断是否以指定字符串结尾
a.find('高')第一次出现指定字符串的位置
a.rfind('高')最后一次出现指定字符串的位置
a.count("编程")指定字符串出现了几次
a.isalnum()判断所有字符全是字母或数字

  2.去除首尾信息

通过 strip()去除字符串首尾指定信息。通过 lstrip()去除字符串左边指定信息, rstrip()去除字符串右边指定信息。

3.大小写转换

例如:a="gao qi love SXT"

示例说明结果
a.capitalize()产生新的字符串,首字母大写'Gao qi love sxt'
a.title()产生新的字符串,每个单词都首字母大写'Gao Qi Love Sxt'
a.upper()产生新的字符串,所有字符全转成大写'GAO QI LOVE SXT'
a.lower()产生新的字符串,所有字 符全转成小写'gao qi love sxt'
a.swapcase()产生新的,所有字母大小写转换'GAO QI LOVE sxt'

 

 

 

 

 

 

 

      

4.格式排版

center()、ljust()、rjust()这三个函数用于对字符串实现排版。示例如下:

>>> a="SXT"
>>> a.center(10,"*")
'***SXT****'
>>> a.center(10)
'   SXT    '
>>> a.ljust(10,"*")
'SXT*******'
>>> a.rjust(10,"*")
'*******SXT'

5.其他方法

1. isalnum() 是否为字母或数字

2. isalpha() 检测字符串是否只由字母组成(含汉字)。

3. isdigit() 检测字符串是否只由数字组成。

4. isspace() 检测是否为空白符

5. isupper() 是否为大写字母 6. islower() 是否为小写字母

字符串的格式化

format()基本用法

#方法1  通过索引来填入对应的参数值
>>> a = "名字是:{0},年龄是:{1}"
>>> a.format("高淇",18)
'名字是:高淇,年龄是:18'

#方法2   通过参数名来映射参数值
>>> c = "名字是{name},年龄是{age}"
>>> c.format(age=19,name='高淇')
'名字是高淇,年龄是19'

填充与对齐

填充常跟对齐一起使用

^、< 、>分别是居中、左对齐、右对齐,后面带宽度 :号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充

例如:>>> "{:*>8}".format("245")

            '*****245'

数字格式化

浮点数通过 f,整数通过 d 进行需要的格式化。

可变字符串

在 Python 中,字符串属于不可变对象,不支持原地修改,如果需要修改其中的值,只能创建新的字符串对象。但是,经常我们确实需要原地修改字符串,可以使用 io.StringIO 对象或 array 模块。

>>> import io       #导入io模块
>>> s='hello sxt'    #定义一个字符串s

>>> sio=io.StringIO(s)  #重新生产一个新的可变字符串sio
>>> sio.seek(7)         #指针指向sio字符串的索引号为7的位置
7
>>> sio.write('g')      #在索引位置为7的地方写入字母g
1
>>> sio.getvalue()      #读取变化后的sio字符串的值
'hello sgt'

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值