一、字符串
1.什么是字符串
字符串:就是用单引号或者双引号括起来的字符集
字符:就是引号中单独的符号、数字、单词、汉字等
'123' #数字字符串
'afjl'
'&^*%$'
'12sf$%'
'汉字'
' ' (空串)
转义字符:是用来表示一些特殊功能或者特殊意义的字符(通过在固定的字符前加\来表示)
\' --->'
str1='\''
print(str1) #'
\\ --->\
str2='\\'
print(str2) #\
\n --->换行
str3='床前明月光,\n疑是地上霜。'
print(str3) #床前明月光,
疑是地上霜。
\t --->制表符
\r --->回车
\" --->"
2.阻止转义
python中可以通过r(或R),来阻止转义字符转义
例:打印\\
方法1:str1='\\\\'
方法2:str2=r'\\' 或者 str2=R'\\'
3.Unicode编码
- 3.1 python中字符串中的字符是Unicode编码
- 3.2 Unicode编码(万国码):使用16位对一个字符进行编码
- 3.3 编码的目的是:让字符可以存储到计算机中
- 3.4 Unicode编码包含ASSCII码,可以表示世界上所有的语言和符号
- 3.5 ord(字符) --->Unicode码
- 3.6 chr(Unicode码 ) --->字符
(1)获取一个字符的Unicode编码(ord)--->ord(字符)
print(hex(ord('郑')),hex(ord('丽'))) #0x90d1 0x4e3d
(2)将一个Unicode编码转换成字符 (chr)--->chr(编码值)
print(chr(0x4e00)) # 一
(3)字符串比较大小的时候,从字符串开始依次往后比较每个字符的大小,直到遇到字符不一样为止
(4)比较字符大小的时候,实质比的是他们的编码的大小(小写字母大于对应的大写字母)
print('abc'>'b') #False
print('a'<'ab') #True
print(hex(ord('a')),hex(ord('A')),hex(ord('z')),hex(ord('Z')))
#0x61 0x41 0x7a 0x5a
print('A'<'a') #True
print('a'<'Z') #False
二、获取字符串的字符
python的字符串,实质是一个有序的字符序列
1.获取字符串的长度:(长度是指字符的个数)
count=len('a b 1 2')
print(count) #7 (空格也是字符串的1个长度)
count=len('abc\n123')
print(count) #7 (\n是一个转义字符,换行键,属于一个字符)
2.通过下标获取字符串中的某一个字符
字符串中的每个字符都对应一个下标(索引),我们可以通过索引值
去获取固定的字符:字符串[索引值]
字符串[开始索引:结束的索引]
字符串[开始索引:结束的索引:步进] 开始索引 开始索引+步进
str1='a2j2h1'
print(str1[0]) #a
str2="good good study\nday day up"
print(str2[25]) #p
下标的范围:0-(字符串长度-1);或者(-1)-(-字符串长度)
获取字符的时候,索引值不能操作索引的范围,否则会报错IndexError
str3='abc'
#print(str3[4]) #IndexError: string index out of range(超出范围)
获取字符串,可以从后往前开始获取,下标从-1开始
总范围:(-1)~(-字符串长度)
print(str3[-1]) #c
3.获取字符串的部分字符串:字符串[开始下标:结束下标]--->区间左闭右开(包含开始,不含结束)
要求:开始下标对应的字符,要在结束下标对应的字符前面(步进是正数)
str4='hello Python'
print(str4[6:12]) #Python
print(str4[-6:12]) #Python
开始下标省略:从字符串的最开始,取到结束下标前
str4='hello Python'
print(str4[:5]) #hello
结束下标省略:从开始位置获取到结束下标前
str4='hello Python'
print(str4[6:]) #Python
两个都省略:获取整个字符串内容
str4='hello Python'
print(str4[:]) #hello Python
设置步进
str5='123456789'
print(str5[::2]) #13579
当步进是负数时,开始下标和结束下标的性质相反
str5='123456789'
print(str5[3:1:-1]) #43
字符串倒叙
str5='123456789'
print(str5[::-1]) #987654321
例:获取从第三个字符开始后面所有的字符
print(var[2:])
例:获取从第4个字符开始到倒数第二个的所有字符
print(var[4:-1]) #右边是开区间,取不到最后一个
三、字符串运算符
字符串运算符: + * in not in 占位符
1. +:字符串拼接
str1='hello' + ' '+ 'python'
print(str1) #hello python
注意:+ 两边要么都是数字,要么都是字符串,不可以一个是数字一个是字符串
# print(12+'34')
#TypeError: unsupported operand type(s) for +: 'int' and 'str'
2、 * :让字符串重复
字符串*整数
str1='abc'*3
print(str1) #abcabcabc
3. in ---> 字符串1 in 字符串2
判断字符串1是否在字符串2中
result='aa' in 'abaaac'
print(result) #True
result1='aa' in 'abac'
print(result1) #False
result2='a' in 'abc'
print(result2) #True
4. not in ---> 字符串1 not in 字符串2
判断字符串1是否不在字符串2中--->不在就True,在False
result='123' not in '12ac3'
print(result) #True
下表实例变量a值为字符串 "Hello",b变量值为 "Python":
操作符 | 描述 | 实例 |
---|---|---|
+ | 字符串连接 | a + b 输出结果: HelloPython |
* | 重复输出字符串 | a*2 输出结果:HelloHello |
[] | 通过索引获取字符串中字符 | a[1] 输出结果 e |
[ : ] | 截取字符串中的一部分 | a[1:4] 输出结果 ell |
in | 成员运算符 - 如果字符串中包含给定的字符返回 True | 'H' in a 输出结果 1 |
not in | 成员运算符 - 如果字符串中不包含给定的字符返回 True | 'M' not in a 输出结果 1 |
r/R | 原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母 r(可以大小写)以外,与普通字符串有着几乎完全相同的语法。 | print( r'\n' )print( R'\n' ) |
% | 格式字符串 | %s等 |
5.格式化字符串
格式:'占位符1占位符2'%(值1,值2)
在 Python 中,字符串格式化%s使用与 C 中 sprintf 函数一样的语法。
python字符串格式化符号:
符号 | 描述 |
---|---|
%c | 格式化长度是1的字符串及其ASCII码 |
%s | 格式化字符串 |
%d | 格式化整数 |
%u | 格式化无符号整型 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化浮点数字,可指定小数点后的精度 |
%.nf | 使用n值限制小数点后面的小数位数(默认六位) |
%e | 用科学计数法格式化浮点数 |
%E | 作用同%e,用科学计数法格式化浮点数 |
%g | %f和%e的简写 |
%G | %f 和 %E 的简写 |
%p | 用十六进制数格式化变量的地址 |
str1='abc%s12%s3'%('>>>','aaa')
print(str1) #abc>>>12aaa3
str2='-%s-%d-%f-%c-%e'%('字符串',+23,1.02,'a',10e2)
print(str2) #-字符串-23-1.020000-a-1.000000e+03
str3='金额:%.2f元'%(10.084)
print(str3) #金额:10.08元
如果后面没有加%,那么这个字符串只是一个普通的字符串
str4='我%d岁了'
print(str4) #我%d岁了
例:某某的十六进制是多少
number=15
str4='%d的十六进制是%x%X'%(number,number,number)
print(str4) #15的十六进制是fF
6.格式化输出
例:某某今天多少岁
name='小二'
age=18
print(('%s今年%d岁')%(name,age)) #小二今年18岁
四、字符串相关方法
字符串相关方法的通用格式:字符串.函数()
Python 的字符串常用内建函数如下:
序号 | 方法 | 描述 |
---|---|---|
1 | capitalize() | 将字符串的第一个字符转换为大写 |
2 | center(width, fillchar) | 返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。 |
3 | count(str, beg= 0,end=len(string)) | 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数 |
4 | bytes.decode(encoding="utf-8", errors="strict") | Python3 中没有 decode 方法,但我们可以使用 bytes 对象的 decode() 方法来解码给定的 bytes 对象,这个 bytes 对象可以由 str.encode() 来编码返回。 |
5 | encode(encoding='UTF-8',errors='strict') | 以 encoding 指定的编码格式编码字符串,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace' |
6 | endswith(suffix, beg=0, end=len(string)) | 检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False. |
7 | expandtabs(tabsize=8) | 把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8 。 |
8 | find(str, beg=0 end=len(string)) | 检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1 |
9 | index(str, beg=0, end=len(string)) | 跟find()方法一样,只不过如果str不在字符串中会报一个异常. |
10 | isalnum() | 如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False |
11 | isalpha() | 如果字符串至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False |
12 | isdigit() | 如果字符串只包含数字则返回 True 否则返回 False.. |
13 | islower() | 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False |
14 | isnumeric() | 如果字符串中只包含数字字符,则返回 True,否则返回 False(中文数字也可以) |
15 | isspace() | 如果字符串中只包含空白,则返回 True,否则返回 False. |
16 | istitle() | 如果字符串是标题化的(见 title())则返回 True,否则返回 False |
17 | isupper() | 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False |
18 | join(seq) | 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 |
19 | len(string) | 返回字符串长度 |
20 | ljust(width[, fillchar]) | 返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。 |
21 | lower() | 转换字符串中所有大写字符为小写. |
22 | lstrip() | 截掉字符串左边的空格或指定字符。 |
23 | maketrans() | 创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。 |
24 | max(str) | 返回字符串 str 中最大的字母。 |
25 | min(str) | 返回字符串 str 中最小的字母。 |
26 | replace(old, new [, max]) | 把 将字符串中的 str1 替换成 str2,如果 max 指定,则替换不超过 max 次。 |
27 | rfind(str, beg=0,end=len(string)) | 类似于 find()函数,不过是从右边开始查找. |
28 | rindex( str, beg=0, end=len(string)) | 类似于 index(),不过是从右边开始. |
29 | rjust(width,[, fillchar]) | 返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串 |
30 | rstrip() | 删除字符串字符串末尾的空格. |
31 | split(str="", num=string.count(str)) | num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num 个子字符串 |
32 | splitlines([keepends]) | 按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。 |
33 | startswith(str, beg=0,end=len(string)) | 检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。 |
34 | strip([chars]) | 在字符串上执行 lstrip()和 rstrip() |
35 | swapcase() | 将字符串中大写转换为小写,小写转换为大写 |
36 | title() | 返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle()) |
37 | translate(table, deletechars="") | 根据 str 给出的表(包含 256 个字符)转换 string 的字符, 要过滤掉的字符放到 deletechars 参数中 |
38 | upper() | 转换字符串中的小写字母为大写 |
39 | zfill (width) | 返回长度为 width 的字符串,原字符串右对齐,前面填充0 |
40 | isdecimal() | 检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false。 |
1.capitalize:将一个字符串的首字母转换成大写,并产生另一个新的字符串
str1='ajk'
new_str=str1.capitalize()
print(str1,new_str) #ajk Ajk 产生一个新的字符串
2.center(width,fillchar)居中对齐
将原字符串变成指定长度width并居中的字符串,fillchar是填充的字符,默认为空格
new_str=str1.center(10,'-')
print(str1,new_str) #ajk ---ajk----
3.rjust(width,fillchar) 右对齐
new_str=str1.rjust(10,'!')
print(str1,new_str) #ajk !!!!!!!ajk
4.ljust(width,fillchar) 左对齐
str2='你好'
new_str=str2.ljust(5,'!')
print(str2,new_str) #你好 你好!!!
例:产生学号
str(数据):将任何其他的数据转化成字符串
number=19
new_str=str(number)
num_str=new_str.rjust(3,'0')
print(num_str) #019
new_str='py1805'+ num_str
print(new_str) #py1805019
5.字符串1.join(字符串2)
在字符串2的每个字符之间插入字符串1的内容
new_str='aaa'.join('11')
print(new_str) #1aaa1
6.maketrans() :将第一个参数的元素作为字典的key,第二个参数的元素作为字典的值
new_str=str.maketrans('abc','123')
print(new_str) #{97: 49, 98: 50, 99: 51}
7.max() :比的是万国码
print(max("a13232dbsa")) #c