【Python】字符串

python字符串



一、字符串基本知识

字符串编码

  • Python3直接使用Unicode,可以表示世界上任何书面的字符。Python3的字符默认就是16位的Unicode编码,ASCII码是Unicode编码的子集。
  • 内置函数ord()可以将字符转换成对应的Unicode码。
  • 内置函数chr()可以将十进制数字转换成对应的字符。

引号创建字符串

  • 我们可以通过单引号或双引号创建字符串。例如:a='qust';b="sqt"。使用两种引号的好处是可以创建本身就含有引号的字符串,而无需使用转义字符。
  • 连续三个单引号或双引号,可以创建多行的字符串。

空字符与len()函数

  • Python允许空字符的存在,即不包含任何字符。
>>>a=''
>>>len(a) #len() 用于计算字符串含有多少字符
   0

转义字符

  • 我们可以使用“\+特殊字符”,实现某些难以用字符表示的效果。
转义字符描述
\ (在行尾时)续行符
\ \反斜杠符号
\ ’单引号
\ "双引号
\ b退格(Backspace)
\ n换行
\ t横向制表符
\ r回车

字符串拼接

  • 可以使用+将多个字符串拼接起来。例如:'a'+'b'——>'ab'
  • 可以将多个字符串放在一起,中间用空格隔开,实现拼接。例如:'aa' 'bb'——>'aabb'

字符串复制

  • 使用*实现字符串复制。
>>>a='srt'*3
>>>a
   srtsrtsrt

不换行打印

  • 调用print()时,会自动打印一个换行符。当不想自动添加换行符时,可以通过参数end=“任意字符串”,实现末尾添加任何内容。
print('srt',end='#')
print('srt')
----------------------------
运行结果为:
srt#srt

从控制台读取字符串

  • 使用input()从控制台读取键盘输入内容。
>>>myname=input("请输入名字:")
   请输入名字:小明
>>>myname
   小明   

二、字符串操作

str()函数

  • 将其他类型的数据转换成字符串。
>>>str(3.14) #浮点型转字符串
  '3.14'

使用[ ]截取字符串

>>>a="assnm"
>>>a[0]
   'a'
>>>a[-1]
   'm'

replace()函数替换

  • Python中字符串不可改变,但我们有时需要替换某些字符。这时,只能通过创建新的字符串来实现。
>>>a="assnm"
>>>a.replace("a","流")
   '流ssnm'
>>>a
   'assnm'
####  
>>>a=a.replace("a","流")
>>>a
   '流ssnm'
  • 整个过程中,实际上是创建了新的字符串对象,并指向了变量a,而不是修改了以前的字符串。内存图如下:
    在这里插入图片描述

字符串切片slice操作

  • 切片slice操作可以让我们快速地提取子字符串。标准格式为:[起始偏移量start:终止偏移量end:步长step]包头不包尾。
操作和说明示例结果
[:] 提取整个字符串“abcdef”[:]“abcdef”
[start:] 从start索引开始到结尾“abcdef”[2:]“cdef”
[:end] 从开头到(end-1)“abcdef”[:2]“ab”
[start:end] 从start到(end-1)“abcdef”[2:4]“cd”
[start :end :step] 从start到(end-1),步长为step“abcdef”[1:5:2]“bd”
  • 其他操作(三个量为负数)的情况:
示例说明结果
“abcdefghijklmnopqrstuvwxyz”[-3:]倒数三个“xyz”
“abcdefghijklmnopqrstuvwxyz”[-8:-3]倒数第八个到倒数第三个(包头不包尾)“stuvw”
“abcdefghijklmnopqrstuvwxyz”[ : :-1]步长为负数,从右向左反向提取“zyxwvutsrqponmlkjihgfedcba”
  • 切片操作时,起始偏移量和终止偏移量不在[0,字符串长度-1]也不会报错。起始偏移量小于0会当作0,终止偏移量大于“字符串长度-1”会 被当作-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 ', '']
>>>a.split('to')
   ['', ' be or not ', ' be']
  • join()用于将多个字符串连接起来。
>>>a=['sxt','sxt100','sxt200']
>>>'*'.join(a)
   sxt*sxt100*sxt200
  • 使用+拼接字符,会产生全新的对象。join函数在拼接字符之前,会计算所有字符的长度,然后逐一拷贝,仅创建一次对象。
  • +与 join函数的效率比较:
import time
time01=time.time()
a=""
for i in range(100000):
    a+="sxt"
time02=time.time()
print('运算时间:'+str(time02-time01))


time03=time.time()
li=[]
for i in range(100000):
    li.append("sxt")
a="".join(li)
time04=time.time()
print('运算时间:'+str(time04-time03))

==== RESTART: D:/python_exec/mypy05.py ===
运算时间:1.0779235363006592
运算时间:0.016582489013671875

字符串驻留机制

  • 字符串驻留:仅保存一份相同且不变的字符串被存放在字符串驻留池中。
  • Python支持字符串驻留机制,对于符合标识符规则的字符串(仅包含下划线、字母、数字)会启用字符串驻留机制。
>>>a="abc_33"
>>>b="abc_33"
>>>a is b
True
>>>id(a)
2448917814128
>>>c='cd#'
>>>d='cd#'
>>>c is d
False
>>>id(c)
2448917822576
>>>id(d)
2448917822640

成员操作符

  • in / not in 关键词,判断某个字符(子字符串)是否存在于字符串中。
>>>a="abcdefg"
>>>"b"in a
True
>>>"dd" in a
False
>>>"dd" not in a
True

三、字符串常用方法汇总

常用查找方法

  • 我们以一段文本作为测试:小说,对于大家来说都不陌生,因为大家日常课外阅读的作品,很大一部分是小说。
>>>a="小说,对于大家来说都不陌生,因为大家日常课外阅读的作品,很大一部分是小说。"
>>>len(a)
37
>>>a.startswith("小说")
True
>>>a.endswith("是小说")
False
>>>a.find("对")
3
>>>a.rfind("小")
34
>>>a.count("小")
2
>>>a.isalnum()
False
方法和使用示例说明结果
len(a)字符串长度37
a.startswith(“小说”)以指定字符串开头True
a.endswith(“小说”)以指定字符串结尾False
a.find(“对”)第一次出现指定字符串的位置3
a.rfind(“小”)最后一次出现指定字符串的位置34
a.count(“小”)指定字符串出现几次2
a.isalnum()所有字符全是字母(包括汉字)或数字False

去除收尾信息

  • 我们可以通过strip()去除字符串首位的指定信息。通过lstrip()去除字符串左边的指定信息,rstrip()去除字符串右边的指定信息。
>>>"*sx*t*".strip("*")
'sx*t'
>>>"*sx*t*".lstrip("*")
'sx*t*'
>>>"*sx*t*".rstrip("*")
'*sx*t'

大小写转换

  • 先设定一个测试变量:a="lihua love programming,love SXT "
>>>a="lihua love programming,love SXT "
>>>a.capitalize()
'Lihua love programming,love sxt '
>>>a.title()
'Lihua Love Programming,Love Sxt '
>>>a.upper()
'LIHUA LOVE PROGRAMMING,LOVE SXT '
>>>a.lower()
'lihua love programming,love sxt '
>>>a.swapcase()
'LIHUA LOVE PROGRAMMING,LOVE sxt '
示例说明结果
a.capitalize()产生新的字符串,首字母大写'Lihua love programming,love sxt ’
a.title()产生新的字符串,每个单词都首字母大写'Lihua Love Programming,Love Sxt ’
a.upper()产生新的字符串,所有字符转成大写'LIHUA LOVE PROGRAMMING,LOVE SXT ’
a.lower()产生新的字符串,所有字符转成小写'lihua love programming,love sxt ’
a.swapcase()产生新的字符串,所有字母大小写转换'LIHUA LOVE PROGRAMMING,LOVE sxt ’

格式排版

  • center()、ljust()、rjust()这三个函数用于对字符串实现排版。
>>>a="SXT"
>>>a.center(10,"*") #占10个字符,居中,用*占位
'***SXT****'
>>>a.center(10) #占10个字符,居中,用空格占位
'   SXT    '
>>>a.ljust(10,"*") #占10个字符,左对齐,用*占位
'SXT*******'
>>>a.rjust(10,"*") #占10个字符,右对齐,用*占位
'*******SXT'

判断方法

函数说明
isalnum()是否为字母(包括汉字)或数字
isalpha()检测字符串是否只由字母组成(含汉字)
isdigit()检测字符串是否只由数字组成
isupper()是否为大写字母
islower()是否为小写字母
>>>"sxt100".isalnum()
True
>>>"sxt尚学堂".isalpha()
True
>>>"234.3".isdigit()
False
>>>"aB".isupper()
False
>>>"\t\n".isspace()
True

format格式化

  • format基本用法:
>>>a="名字是:{0},年龄是:{1}"
>>>a.format("xiaom",18)
'名字是:xiaom,年龄是:18'

#---------------------------------------

>>>a="名字是:{nmae},年龄是:{age}"
>>>a.format(nmae="li",age=12)
'名字是:li,年龄是:12'
  • 填充与对齐:
    • ^、<、>分别是居中、左对齐、右对齐,后面带宽度。:后面带填充字符,只能是一个字符,不指定的话默认是用空格填充。
>>>"{:*^8}".format("245")
'*****245'

>>>"我是{0},喜欢数字{1:*^8}".format("高琪","666")
'我是高琪,喜欢数字**666***'

>>>"我是{0},喜欢数字{1:^8}".format("高琪","666")
'我是高琪,喜欢数字  666   '
  • 数字格式化
    • 浮点数通过f,整数通过d,进行需要的格式化。
>>>a="我是{0},我的存款{1:.2f}"
>>>a.format("高琪",23.888)
'我是高琪,我的存款23.89'
#____________________________________________
>>>"{:0>10d}".format(3)
'0000000003'

>>>"{:0<10d}".format(3)
'3000000000'

在这里插入图片描述

可变字符串

  • 在Python中,字符串属于不可变对象,不支持原地修改,若果需要修改其中的值,会自动创建新的字符串对象。但是我们经常需要原地修改,则可以使用io.StringIO对象或array模块。
>>>import io
>>>s="hello,sxt"
>>>sio=io.StringIO(s)
>>>sio
<_io.StringIO object at 0x000002868237F2E0>
>>>sio.getvalue()
'hello,sxt'
>>>sio.seek(6)
6
>>>sio.write("g")
1
>>>sio.getvalue()
'hello,gxt'

四、运算符

基本运算符

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

符合赋值运算符

在这里插入图片描述

运算符优先级问题

在这里插入图片描述


以上就是本文的全部内容,感谢各位的阅读与支持!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值