简介

字符串(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’为例,讲解如何使用切片工具。

python定义字符类型数据类型 python如何定义字符_python定义字符类型数据类型

图中我们使用了正向索引和反向索引来标记字符串中每个值的位置,首先我们可以使用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值