1.字符串概述
字符串是编程语言中的一种数据类型,Python当中字符串与其他语言中的字符串一样,是一种强大的处理工具集,但与C语言不同的是,Python中没有单个字符这种类型,取而代之的是只有一个字符的字符串类型。Python字符串被划为了不可变序列这一类别,这意味着Python中的字符串存在从左到右的顺序,且他们不可在原位置上修改。
2.一般的字符串
2.1字符串的定义
Python中字符串的定义可以用单引号、双引号和三引号,,其中单双引字符串是一样的,可以通用,但三引号不同,三引号的字符串类似标注信息,可以用来说明代码的用途,也可以在程序中运行。字符串定义的举例:
>>
>
'abcd'
'abcd'
>>
>
"abcd"
'abcd'
>>
>
"""abcd"""
'abcd'
>>
>
'ab'
,
"cd"
(
'ab'
,
'cd'
)
>>
>
'ab"cd'
,
"ab'cd"
# 逗号隔开的字符串会形成一个元组
(
'ab"cd'
,
"ab'cd"
)
>>
>
title
=
'a'
"b"
'c'
#字符串会自动合并
>>
>
title
'abc'
2.2转义字符串
在字符串中加入“\”可以嵌入一些特殊的字符,反斜杠会引入特殊的字节编码,可以让我们能在字符串中嵌入不容易使用键盘输入的字符。Python中提供的一些转义字符如下表,更多的考研参考一些Python教材:
转义 | 说明 |
---|---|
\newline | 忽视(连续) |
\ \ | 反斜杠(\)) |
\ ’ | 单引号(‘) |
\ “ | 双引号(“) |
\ n | 换行 |
2.3Raw字符串
Raw字符串会抑制转义,可以用在不需要转义的场景,比如通过字符串定位到文件并打开。举例如下:
>>
>
path
=
'C:\new\text.dat'
>>
>
path
'C:\new\text.dat'
>>
>
print
(
path
)
C
:
ew ext
.
dat
>>
>
path
=
r
'C:\new\text.dat'
# Raw字符串抑制转义
>>
>
print
(
path
)
C
:
\new\text
.
dat
2.4三重引号的字符串
又称块字符串,可以方便的写出换行这种格式的字符串。
>>
>
txt
=
"""llllllll
... bbbbbbbb
... cccccccc
... """
>>
>
print
(
txt
)
llllllll
bbbbbbbb
cccccccc
3字符串的应用
3.1基本操作
>>
>
len
(
'abc'
)
# 求字符串的长度
3
>>
>
'abc'
+
'def'
# 字符串相加
'abcdef'
>>
>
'a'
*
4
# 重复字符的生成
'aaaa'
>>
>
'abc'
+
9
# 错误的使用
Traceback
(
most recent call last
)
:
File
"
"
,
line
1
,
in
<
module
>
TypeError
:
must be
str
,
not
int
>>
>
a
=
"hacker"
>>
>
'k'
in
a
True
>>
>
'ha'
in
a
True
注意,两个字符串相加会生成一个新的字符串对象,同时字符串相加不允许字符串加数字等样式的操作出现。字符串是可迭代对象,故可以使用“in”。
3.2索引和分片
Python中的偏移量是从0开始的,字符串中每一个字符都有其对应的索引值,其功能的使用与列表和元组类似分片一般可以有三个参数,比如S[a️c],a是起始索引,b是结束索引,c是分片步长。
>>
>
s
=
"spark"
>>
>
s
[
1
]
# 按索引取值
'p'
>>
>
s
[
-
2
]
# 取倒数第二个字符
'r'
>>
>
s
[
1
:
3
]
,
s
[
1
:
]
,
s
[
:
-
1
]
# 字符串的分片
(
'pa'
,
'park'
,
'spar'
)
>>
>
s
[
:
:
-
1
]
# 分片的逆序用法
'kraps'
3.3修改字符串
不能原地修改一个字符串,因为字符串是不可变序列。
>>
>
s
=
"abcde"
>>
>
s
[
0
]
=
b
Traceback
(
most recent call last
)
:
File
"
"
,
line
1
,
in
<
module
>
NameError
:
name
'b'
is
not
defined
需要修改时可以尝试使用字符串的拼接(字符串变长)或者分片(字符串变短)来实现,而需要改变字符串的某个位置的字符时可以考虑使用replace方法来替换。
>>
>
a
=
"abcdefg"
>>
>
b
=
a
+
"hijklmn"
>>
>
b
'abcdefghijklmn'
>>
>
c
=
a
[
:
3
]
>>
>
c
'abc'
>>
>
b
=
a
.
replace
(
'a'
,
'pp'
)
# replace方法会生成新的字符串对象
>>
>
b
'ppbcdefg'
>>
>
a
# 原字符串不变
'abcdefg'
3.4常用的字符串方法
replace(a,b) 方法,将字符串中的子字符串a替换为b。
>>
>
a
=
"abcdefga"
>>
>
b
=
a
.
replace
(
'a'
,
'pp'
)
>>
>
b
'ppbcdefgpp'
find(a) 方法返回子字符串a第一次出现的偏移量,如果没有子串a,返回-1。
>>
>
a
=
"abcdefga"
>>
>
a
.
find
(
"abc"
)
0
>>
>
a
.
find
(
"bcd"
)
1
>>
>
a
.
find
(
"abd"
)
-
1
>>
>
a
.
find
(
"asfjlkfsjdafkdjfkaj"
)
-
1
list(s) 方法,将字符串s转换为列表。
>>
>
a
=
"abcdefga"
>>
>
list
(
a
)
[
'a'
,
'b'
,
'c'
,
'd'
,
'e'
,
'f'
,
'g'
]
join(s) 方法,将列表s转换为字符串。join为字符串的拼接方法,需要直接作用于字符串上,比如m为字符串,m.join(s)的作用是将s列表中所有的子串以m为分隔拼接起来。
>>
>
a
=
"abcdefga"
>>
>
b
=
list
(
a
)
>>
>
b
[
'a'
,
'b'
,
'c'
,
'd'
,
'e'
,
'f'
,
'g'
]
>>
>
''
.
join
(
b
)
'abcdefg'
>>
>
' '
.
join
(
b
)
'a b c d e f g'
>>
>
'AABB'
.
join
(
b
)
'aAABBbAABBcAABBdAABBeAABBfAABBg'
split(a) 方法,按照a的方式分割字符串,将分割出来的子串保存到一个列表中,a可以省略,默认按空格分割。
>>
>
a
=
"abc bcd cde"
>>
>
a
.
split
(
)
[
'abc'
,
'bcd'
,
'cde'
]
>>
>
a
.
split
(
" "
)
[
'abc'
,
'bcd'
,
'cde'
]
>>
>
b
=
"abc,def,g"
>>
>
b
.
split
(
','
)
[
'abc'
,
'def'
,
'g'
]
其他方法的使用:
>>
>
a
=
"The knights who say Ni\n"
>>
>
a
.
rstrip
(
)
# 去除字符串末尾的换行符
'The knights who say Ni'
>>
>
a
.
upper
(
)
# 字符串转换为大写字母
'THE KNIGHTS WHO SAY NI\n'
>>
>
a
.
endswith
(
'\n'
)
# 检测结尾字符串
True
>>
>
a
.
startswith
(
'The'
)
# 检测起始字符串
True
更多的其他字符串方法,可以参考Python的开发手册。
3.5字符串的格式化表达
%s % n 样式。这种样式常见于输出时传入变量的情况,与C语言类似。
>>
>
"That is %d %s girl"
%
(
1
,
"nice"
)
'That is 1 nice girl'
%()s % {} 样式,基于字典的字符串格式化。
>>
>
"That is %(n)d %(x)s girl"
%
{
'n'
:
1
,
'x'
:
"nice"
}
'That is 1 nice girl'
>>
>
format 方法。
>>
>
"That is {} {} girl"
.
format
(
1
,
"nice"
)
'That is 1 nice girl'
>>
>
"That is {0} {1} girl"
.
format
(
1
,
"nice"
)
'That is 1 nice girl'
>>
>
"That is {1} {0} girl"
.
format
(
1
,
"nice"
)
# 可以标注数字打乱顺序,0所指代的是format中第一个未命名的参数
'That is nice 1 girl'
>>
>
"That is {0} {n} girl"
.
format
(
1
,
n
=
"nice"
)
# 也可以给format的参数取名,这样可以不按照顺序来
'That is 1 nice girl'
推荐使用format来格式化字符串。