简介
字符串(string)类型是python标准类型之一,也就是“文本”类型,并且字符串是不可更改的数据类型,意味着不能单独改变其中的某个值。与其他语言不同,python中没有字符和字符串的区别。
字符串的创建和赋值
我们可以通过在引号(单引号、双引号、三引号)中包含字符的方式创建它,并且python中的单引号和双引号的作用一样。当然我们也可以通过str()函数来创建一个字符串并赋值给一个变量。
>>>x = 'hello world!'
>>>x
'hello world!'
>>>y = "I love you!"
>>>y
"I love you!"
>>>z = '''what's your name?'''
>>>z
"what's your name?"
>>>a = str(520)
>>>a
'520'
>>>x='hello world!'
>>>x
'hello world!'
>>>y="I love you!"
>>>y
"I love you!"
>>>z='''what's your name?'''
>>>z
"what's your name?"
>>>a=str(520)
>>>a
'520'
切片工具
切片工具能使我们访问序列型(字符串、列表和元组)数据中的值,所以首先来介绍一下python中的切片工具。
通过方括号([]和[:])进行切片操作,我们以字符串‘abcd’为例,讲解如何使用切片工具。
图中我们使用了正向索引和反向索引来标记字符串中每个值的位置,首先我们可以使用len()函数来确定字符串的长度。
>>>len('abcd')
4
1
2
>>>len('abcd')
4
正向索引时,索引值从0开始,结束于总长度减1;反向索引时,索引值从最后的-1开始往前标记。
访问字符串中的值
既然索引值和字符串一一对应,我们可以使用切片工具轻松的访问字符串中的一个或多个值。
>>>a = 'hello world!'
>>>len(a) #空格和标点符号也算一个字符
12
1
2
3
>>>a='hello world!'
>>>len(a)#空格和标点符号也算一个字符
12
方括号加一个索引值访问字符串中单个值。
>>>a[0]
'h'
>>>a[-1]
'!'
>>>a[0]
'h'
>>>a[-1]
'!'
方括号中通过冒号(:)访问多个索引值。格式为:[起始索引:结束索引],注意并不包括结束索引对应的值。起始索引为空,则表示从头开始索引,结束索引为空,则表示索引到最后一个值。
>>>a[0:5] #不包括索引值5对应的空格字符
'hello'
>>>a[:5]
'hello'
>>>a[6:]
'world!'
>>>a[0:5]#不包括索引值5对应的空格字符
'hello'
>>>a[:5]
'hello'
>>>a[6:]
'world!'
字符串运算符
在字符串中也可以进行一些简单的操作运算,现将命令总结如下:
操作符
描述
+
连接字符串
*
重复输出字符串
[]
通过索引获取字符串中字符
[:]
截取字符串中的一部分,遵循左闭右开原则
in
成员运算符 – 如果字符串中包含给定的字符返回 True
not in
成员运算符 – 如果字符串中不包含给定的字符返回 True
r/R
原始字符串 – 所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。经常在路径字符串前使用,避免产生歧义。
代码演示:
>>>a = 'hello '
>>>b = 'world'
>>>a + b
'hello world'
>>>a * 3
'hello hello hello '
>>>'h' in a
True
>>>r'abcd\n'
'abcd\\n'
>>>a='hello '
>>>b='world'
>>>a+b
'hello world'
>>>a*3
'hello hello hello '
>>>'h'ina
True
>>>r'abcd\n'
'abcd\\n'
转义字符
Python中要使用特殊字符时,通过反斜杠(\)转义。如下表所示:
转义字符
描述
\(在行尾时)
续行符
\\
反斜杠符号
\’
单引号
\”
双引号
\a
响铃
\b
退格
\e
转义
\000
空
\n
换行
\v
纵向制表符
\t
横向制表符
\r
回车
\f
换页
\oyy
八进制数,yy代表的字符
\xyy
十六进制数,yy代表的字符
代码演示:
>>>x = 'abcd\nefgh'
>>>print(x)
abcd
efgh
>>>x='abcd\nefgh'
>>>print(x)
abcd
efgh
字符串格式化输出
通过格式化输出,可以定义各种输出形式,甚至是非常复杂的表达式。格式化符号如下:
符号
描述
%c
格式化字符及其ASCII码
%s
格式化字符串
%d
格式化整数
%u
格式化无符号整型
%o
格式化无符号八进制数
%x
格式化无符号十六进制数
%X
格式化无符号十六进制数(大写)
%f
格式化浮点数字,可指定小数点后的精度
%e
用科学计数法格式化浮点数
%E
作用同%e,用科学计数法格式化浮点数
%g
%f和%e的简写
%G
%f 和 %E 的简写
%p
用十六进制数格式化变量的地址
格式化辅助操作如下:
符号
功能
*
定义宽度或者小数点精度
–
用做左对齐
+
在正数前面显示加号( + )
#
在八进制数前面显示零(‘0′),在十六进制前面显示’0x’或者’0X'(取决于用的是’x’还是’X’)
0
显示的数字前面填充’0’而不是默认的空格
%
‘%%’输出一个单一的’%’
(var)
映射变量(字典参数)
m.n.
m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)
代码演示:
>>>'%s' % 'I love you'
'I love you'
>>>'%x' % 108
'6c'
>>>'%.2f' % 1234.56789
'1234.57'
>>>"%04d" % 5
'0005'
>>>'%s'%'I love you'
'I love you'
>>>'%x'%108
'6c'
>>>'%.2f'%1234.56789
'1234.57'
>>>"%04d"%5
'0005'
字符串内建函数大全
下表列出了字符串内建支持的方法,供查阅:
函数
描述
string.capitalize()
将字符串的第一个字符转换为大写
string.center(width,fillchar)
返回一个指定宽度width居中的字符串,fillchar为填充的字符,默认为空格
string.count(str,beg=0,end=len(string))
返回str在string中出现的次数,如果beg和end指定,就返回指定范围内str出现的次数
string.decode(encoding=’UTF-8′,errors=’stict’)
使用指定编码解码字符串。默认编码为字符串编码
string.encode(encoding=’UTF-8′,errors=’stict’)
以encoding指定的编码格式编码字符串,如果出错默认抱一个ValueError异常,除非errors指定是ignore或replace
string.endwith(stuffix,beg=0,end=len(string))
检查字符串是否以obj结束。如果指定beg或end,就检查指定范围内是否以obj结束。如果是就返回True,否则返回False
string.expandtabs(tabsize=8)
把字符串 string 中的 tab 符号转为空格,tab符号默认的空格数是8
string.find(str,beg=0,end=len(string))
检测字符串 str 是否包含在字符串中。如果指定beg和end的值,就检查是否包含在指定范围内。如果是,就返回开始的索引值,否则返回-1
string.index(str,beg=0,end=len(string))
跟find()方法一样,只不过如果str不在字符串中就会报一个异常
string.isalnum()
如果字符串非空,且所有字符都是字母或数字,就返回True否则返回False
string.isalpha()
如果字符串非空,且所有字符都是字母,就返回True否则返回False
string.isdigit()
如果字符串只包含数字就返回True否则返回False
string.islower()
如果字符串中包含至少一个区分大小写的字符,并且所有字符都是小写,就返回True,否则返回False
string.isnumeric()
如果字符串只包含数字字符,就返回True,否则返回False
string.isspace()
如果字符串只包含空格,就返回True,否则返回False
string.istitle()
如果字符串是标题化的(见title()),就返回True,否则返回False
string.isupper()
如果字符串中包含至少一个区分大小写的字符,并且所有字符都是大写,就返回True,否则返回False
string.join(seq)
以指定字符串为分隔符,将seq中的所有元素(字符串表示)合并为一个新字符串
string.len(string)
返回字符串长度
string.ljust(width[,fillchar])
返回左对齐的原字符串,并用fillchar填充至长度 width 的新字符串,fillchar 默认为空格
string.lower()
转换字符串所有大写字符为小写
string.lstrip()
截掉字符串左边的空格
string.maketrans()
创建字符映射的转换表,对于接收两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符;第二个参数也是字符串,表示转换的目标。
string.max(str)
返回字符串 str 中的最大字母
string.min(str)
返回字符串 str 中最小的字母
string.repalce(old,new[,max])
将原字符串中的str1替换为str2,若max指定,替换就不超过max次
string.rfind(str,beg=0,end=len(string))
类似find()函数不过是从右边开始查找
string.rindex(str,beg=0,end=len(string))
类似于 index()函数,不过是从右边开始查找
string.rjust(width[,fillchar])
返回右对齐的原字符串,并用fillchar填充至长度 width 的新字符串,fillchar 默认为空格
string.rstrip()
删除字符串末尾的空格
string.split(sep=None, maxsplit=-1)
以sep为分割符截取字符串,如果maxsplit有指定值,就截取maxsplit个子字符串
string.splitlines([keepends])
按照行分割,返回一个包含各行元素的列表。
string.startswith(str,beg=0.end=len(string))
检查字符串是否以str开头,返回一个bool值
string.strip([char])
在字符串上执行lstrip()和rstrip()
string.swapcase()
将字符串中的大写转换为小写,小写转换为大写
string.title()
返回“标题化”的字符串,就是所有单词都以大写开始,其余字母均为小写
string.translate(table)
根据给出的表table转换string的字符
string.upper()
转换字符串中的小写字幕为大写
string.zfill(width)
返回长的为width的字符串,原字符串右对齐,前面填充0
string.isdecimal()
检查字符串是否包含十进制字符,返回一个bool值