简介
字符串(string)类型是python标准类型之一,也就是“文本”类型,并且字符串是不可更改的数据类型,意味着不能单独改变其中的某个值。与其他语言不同,python中没有字符和字符串的区别。
字符串的创建和赋值
我们可以通过在引号(单引号、双引号、三引号)中包含字符的方式创建它,并且python中的单引号和双引号的作用一样。当然我们也可以通过str()
函数来创建一个字符串并赋值给一个变量。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
>>>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()
函数来确定字符串的长度。
1 2 |
>>>len('abcd') 4 |
正向索引时,索引值从0开始,结束于总长度减1;反向索引时,索引值从最后的-1开始往前标记。
访问字符串中的值
既然索引值和字符串一一对应,我们可以使用切片工具轻松的访问字符串中的一个或多个值。
1 2 3 |
>>>a = 'hello world!' >>>len(a) #空格和标点符号也算一个字符 12 |
方括号加一个索引值访问字符串中单个值。
1 2 3 4 5 |
>>>a[0] 'h' >>>a[-1] '!' |
方括号中通过冒号(:)访问多个索引值。格式为:[起始索引:结束索引],注意并不包括结束索引对应的值。起始索引为空,则表示从头开始索引,结束索引为空,则表示索引到最后一个值。
1 2 3 4 5 6 7 8 |
>>>a[0:5] #不包括索引值5对应的空格字符 'hello' >>>a[:5] 'hello' >>>a[6:] 'world!' |
字符串运算符
在字符串中也可以进行一些简单的操作运算,现将命令总结如下:
操作符 | 描述 |
---|---|
+ | 连接字符串 |
* | 重复输出字符串 |
[] | 通过索引获取字符串中字符 |
[:] | 截取字符串中的一部分,遵循左闭右开原则 |
in | 成员运算符 – 如果字符串中包含给定的字符返回 True |
not in | 成员运算符 – 如果字符串中不包含给定的字符返回 True |
r/R | 原始字符串 – 所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。经常在路径字符串前使用,避免产生歧义。 |
代码演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
>>>a = 'hello ' >>>b = 'world' >>>a + b 'hello world' >>>a * 3 'hello hello hello ' >>>'h' in a True >>>r'abcd\n' 'abcd\\n' |
转义字符
Python中要使用特殊字符时,通过反斜杠(\)转义。如下表所示:
转义字符 | 描述 |
---|---|
\(在行尾时) | 续行符 |
\\ | 反斜杠符号 |
\’ | 单引号 |
\” | 双引号 |
\a | 响铃 |
\b | 退格 |
\e | 转义 |
\000 | 空 |
\n | 换行 |
\v | 纵向制表符 |
\t | 横向制表符 |
\r | 回车 |
\f | 换页 |
\oyy | 八进制数,yy代表的字符 |
\xyy | 十六进制数,yy代表的字符 |
代码演示:
1 2 3 4 |
>>>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 是小数点后的位数(如果可用的话) |
代码演示:
1 2 3 4 5 6 7 8 9 10 11 |
>>>'%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值 |