python字符串
一、字符串基本知识
字符串编码
Python3直接使用Unicode,可以表示世界上任何书面的字符。Python3的字符默认就是16位的Unicode编码,ASCII码是Unicode编码的子集。 内置函数ord()
可以将字符转换成对应的Unicode码。 内置函数chr()
可以将十进制数字转换成对应的字符。
引号创建字符串
我们可以通过单引号或双引号创建字符串。例如:a='qust';b="sqt"
。使用两种引号的好处是可以创建本身就含有引号的字符串,而无需使用转义字符。 连续三个单引号或双引号,可以创建多行的字符串。
空字符与len()函数
>> > a= ''
>> > len ( a)
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
从控制台读取字符串
>> > 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' ]
>> > 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 , "*" )
'***SXT****'
>> > a. center( 10 )
' SXT '
>> > a. ljust( 10 , "*" )
'SXT*******'
>> > a. rjust( 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格式化
>> > 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 '
>> > 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'
四、运算符
基本运算符
符合赋值运算符
运算符优先级问题
以上就是本文的全部内容,感谢各位的阅读与支持!