Task04:字符串与序列(1day)
在之前的Task01中的数据类型中我们已经大致介绍了一些字符串的基本知识,接下来我们就详细得来介绍一下字符串。
1.字符串
字符串
字符串是以单引号’或双引号"括起来的任意文本,比如’abc’,“xyz"等等。请注意,’'或”“本身只是一种表示方式,不是字符串的一部分,因此,字符串’abc’只有a,b,c这3个字符。如果’本身也是一个字符,那就可以用”"括起来,比如"I’m OK"包含的字符是I,’,m,空格,O,K这6个字符。
如果字符串内部既包含’又包含"怎么办?可以用转义字符\来标识
>>> print('I\'m"OK"!')
I'm"OK"!
>>>
如果你不希望前置的\把字符转义成特殊字符的含义,那么就使用原始字符串的方式,在引号前添加r即可
>>> print('C:\some\name')
C:\some
ame
这里的\n就是换行的意思,这样不能表达这个字符串的真正含义,
>>> print(r'C:\some\name')
C:\some\name
这样就能得到我们想要的字符串了。
如果字符串内部有很多换行,用\n写在一行里不好阅读,为了简化,Python允许用’’’…’’'的格式表示多行内容,代码如下:
>>> print('''line1
line2
line3''')
line1
line2
line3
我们下面举一个其中一行之中有转义字符的例子:
>>> print('''在多行字符串中
我们可以使用\n去实现
但是\n写在一行中不方便阅读代码''')
在多行字符串中
我们可以使用
去实现
但是
写在一行中不方便阅读代码
可以看到代码中把转义字符也实现了,这里需要注意一下。
字符串可以用 + 进行连接(粘到一起),也可以用 * 进行重复:
>>> text=('ab')
>>> text1=('cd')
>>> text2=3*text+text1
>>> print(text2)
abababcd
相邻的两个或多个 字符串字面值 (引号引起来的字符)将会自动连接到一起
>>> 'Py''thon'
'Python'
把很长的字符串拆开分别输入的时候尤其有用:
>>> text=('Put several strings within parentheses '
'to have them joined together.')
>>> print(text)
Put several strings within parentheses to have them joined together.
但是上面的做法只能对两个字面值这样操作,对于变量或表达式不行:
>>> prefix='Py'
>>> prefix 'thon'
SyntaxError: invalid syntax
但是可以在变量后面直接用加号连接字符串:
>>> prefix+'thon'
'Python'
字符串也可以像列表和元组那样,也是可以索引字符串是可以被 索引 (下标访问)的,第一个字符索引是 0。单个字符并没有特殊的类型,只是一个长度为一的字符串:
'Python'
>>> word='Python'
>>> word[0]
'P'
>>> word[5]
'n'
索引也可以用负数,这种会从右边开始数:
>>> word[-1]
'n'
>>> word[-2]
'o'
意切片的开始总是被包括在结果中,而结束不被包括,就是相当于数学区间的左开右闭。这使得 s[:i] + s[i:] 总是等于 s
切片的索引有默认值;省略开始索引时默认为0,省略结束索引时默认为到字符串的结束:
也可以这么理解切片:将索引视作指向字符之间 ,第一个字符的为0,最后一个字符的为 n -1,其中 n 是字符串长度。而0=-0,所以负数的索引是从-1开始的。也就是word[-1]就是字符串的最后一位。
>>> word[:2]
'Py'
>>> word[4:]
'on'
>>> word[4:5]
'o'
>>>
使用过大的索引会产生一个错误:
>>> word[9]
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
word[9]
IndexError: string index out of range
但是,切片中的越界索引会被自动处理:
>>> word[2:9]
'thon'
Python 中的字符串不能被修改,它们是 immutable 的。因此,不能向字符串的某个索引位置赋值,这样会产生错误的,如果需要一个不同的字符串,应当新建一个:
>>> 'J'+word[1:]
'Jython'
2.字符串的方法
1.str.capitalize():返回原字符串的副本,其首个字符大写,其余为小写。
str.casefold():返回原字符串消除大小写的副本。 消除大小写的字符串可用于忽略大小写的匹配。
lower() :转换字符串中所有大写字符为小写。
upper() :转换字符串中的小写字母为大写。
swapcase() :将字符串中大写转换为小写,小写转换为大写
>>> text='Abcd'
>>> print(text.capitalize())
Abcd
>>> print(text.casefold())
abcd
>>> print(text.lower())
abcd
>>> print(text.upper())
ABCD
>>> print(text.swapcase())
aBCD
2.count(str, beg= 0,end=len(string)) 返回str在 string 里面出现的次数,如果beg或者end指定则返回指定范围内str出现的次数。
>>> text='abcdabcd'
>>> print(text.count('a'))
2
endswith(suffix, beg=0, end=len(string)) 检查字符串是否以指定子字符串suffix 结束,如果是,返回 True,否则返回 False。如果 beg 和 end 指定值,则在指定范围内检查。
startswith(substr, beg=0,end=len(string)) 检查字符串是否以指定子字符串substr 开头,如果是,返回 True,否则返回 False。如果 beg 和 end 指定值,则在指定范围内检查。
>>> text='sdadwqdw'
>>> print(text.endswith('w'))
True
>>> print(text.endswith('d',2,5))
False
>>> print(text.startswith('s',0,7))
True
find(str, beg=0, end=len(string)) 检测 str 是否包含在字符串中,如果指定范围 beg 和 end,则检查是否包含在指定范围内,如果包含,返回开始的索引值,否则返回 -1。
rfind(str, beg=0,end=len(string)) 类似于 find() 函数,不过是从右边开始查找。
>>> print(text.find('dw'))
3
>>> print(text.find('dw',0,3))
-1
isnumeric() 如果字符串中只包含数字字符,则返回 True,否则返回 False。
>>> print(text.isnumeric())
False
>>> text1='123123'
>>> print(text1.isnumeric())
True
ljust(width[, fillchar])返回一个原字符串左对齐,并使用fillchar(默认空格)填充至长度width的新字符串。
rjust(width[, fillchar])返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度width的新字符串。
>>> print(text.ljust(10,'s'))
sdadwqdwss
>>> print(text.rjust(10,'s'))
sssdadwqdw
>>>
lstrip([chars]) 截掉字符串左边的空格或指定字符。
rstrip([chars]) 删除字符串末尾的空格或指定字符。
strip([chars]) 在字符串上执行lstrip()和rstrip()。
>>> print(text.lstrip('s'))
dadwqdw
>>> print(text.lstrip('d'))
sdadwqdw
>>> print(text.lstrip().strip('s'))
dadwqdw
>>> print(text.lstrip().strip('d'))
sdadwqdw
可以看到如果是指定的字符,如果是左边或者右边的字符,确实会删除,但是如果不是就不会对于原字符做出改变。
8.
partition(sub) 找到子字符串sub,把字符串分为一个三元组(pre_sub,sub,fol_sub),如果字符串中不包含sub则返回(‘原字符串’,’’,’’)。rpartition(sub)类似于partition()方法,不过是从右边开始查找。
>>> print(text.partition('d'))
('s', 'd', 'adwqdw')
>>> print(text.rpartition('d'))
('sdadwq', 'd', 'w')
9.replace(old, new [, max]) 把 将字符串中的old替换成new,如果max指定,则替换不超过max次。
>>> print(text.replace('d','a'))
saaawqaw
>>> print(text.replace('d','a',2))
saaawqdw
10.split(str="", num) 不带参数默认是以空格为分隔符切片字符串,如果num参数有设置,则仅分隔num个子字符串,返回切片后的子字符串拼接的列表。
>>> print(text.split('d'))
['s', 'a', 'wq', 'w']
注意这里不包含‘d’字符。
3.字符串格式化
格式化字符串的函数 str.format(),它增强了字符串格式化的功能。
基本语法是通过 {} 和 : 来代替以前的 % 。
format 函数可以接受不限个参数,位置可以不按顺序。
>>> str="{0} qwer {b}".format("yasuo",b='ctrl6')
>>> print(str)
yasuo qwer ctrl6
这里要注意,要按照顺序,0、1……或者是a、b……来给出字符的位置。
Python 字符串格式化符号
%运算符就是用来格式化字符串的。在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。当右边的参数为一个字典(或其他映射类型)时,字符串中的格式 必须 包含加圆括号的映射键,对应 ‘%’ 字符之后字典中的每一项。 映射键将从映射中选取要格式化的值。
转换符 | 含义 |
---|---|
d | 有符号十进制整数 |
i | 有符号十进制整数 |
o | 有符号八进制数 |
x | 有符号十六进制数(小写) |
X | 有符号十六进制数(大写) |
e | 浮点指数格式(小写) |
E | 浮点指数格式(大写) |
f | 浮点十进制格式 |
F | 浮点十进制格式 |
g | 浮点格式,如果指数小于-4或不小于精度则使用小写指数格式,否则使用十进制格式 |
G | 浮点格式。 如果指数小于 -4 或不小于精度则使用大写指数格式,否则使用十进制格式。 |
c | 单个字符(接受整数或单个字符的字符串)。 |
r | 字符串(使用 repr() 转换任何 Python 对象)。 |
s | 字符串(使用 str() 转换任何 Python 对象)。 |
a | 字符串(使用 ascii() 转换任何 Python 对象)。 |
% | 不转换参数,在结果中输出一个 ‘%’ 字符。 |