一.认识字符串
1.什么是字符串
a.用单引号或者双引号括起来的字符集就是字符串
'assd123~..?按键式','98k!'
b.字符串中的每个单独的单元叫字符,用键盘输入的,都是字符。
’98k!'中的‘9’,‘8’,‘k’,‘!’就是字符
2.转义字符
- 说明:python中没有字符类型,如果要表示字符,就用一个长度是一的字符串表示,例如:'a','1'
- 长度:指的是字符串中字符的个数,例如:’abc‘表示长度是3,'123, 你好'表示长度是7(一个空格,一个tab,都表示一个字符)
a.常见的转义字符:
\n-----换行
\t------制表符(相当于tab)
\------,隔开
'------ '
"----- "
在计算字符串长度的时候,转义字符的长度是1
poem = '床前明月光,\n疑是地上霜'
print (poem)
输出
床前明月光,
疑是地上霜
st = '12\'25'
print (str)
输出
12'25
3.Unicode编码
a.python中字符的编码采用的是Unicode编码
b.Unicode是采用两个字节对一个字符进行编码(2^15),能够将世界上所有的符号进行编码
c.Unicode编码中包含ascii码
-
将字符转换成指定的数值,这个过程就是编码。(编码的目的是方便计算机存储),将数值转换成对应的符号的过程就是反编码(解码)
1).将Unicode码转换成字符:chr(编码)
print(chr(0xA48F))
print(chr(0x4e80)) 亀
2).将字符转换成Unicode编码:ord(字符)
name1 = '陈'
name2 = '虹'
name3 = '州'
print(ord(name1),ord(name2),ord(name3))
输出
38472 34425 24030
二、获取字符
- 字符串实质是一个不可变的序列,序列内容是字符。一旦确定字符串,那么里面的字符和字符位置就不可变了,例如:'abc'
1.怎么获取单个字符
- python中的字符串,可以通过下标(索引)来获取指定位置上的字符:字符串[索引]
说明:
a.字符串:可以是字符串值,也可以是字符串变量
b.[]:中括号是固定语法
c.索引:从0开始到字符串长度减1;
-1~负的长度(-1对应的是最后一个字符,-2对应的是倒数第二个字符) - 注意:索引不能越界,否则会报错(产生异常)
str = 'abcd' # a-->0,b-->1c-->2,d-->3
print(str[0]) a
name = '123'
print (name[2]) 3
print (name[-3]) 1
print ('123'[2]) 3
2.获取部分字符(获取字串) --- 切片
a.字符串[下标1:下标2] :
从下标1开始,获取到下标2前的所有字符,从下标1开始,每次下标值加1,一直加到下标2前
- 注意:下标1对应的位置,一定要在下标2对应的位置前
str1 = 'hello world'
print (str1[0:4]) hell
print (str1[2:7]) llo w
print (str1[2:-1]) llo worl
print (str1[0:13]) 切片时小标可以越界,越界的时候就去临界值
b.字符串[下标1:下标2:步进]:
从下标1开始获取 ,每次下标值增加步进值,每增加一次取一个字符,直到取到下标2为止
- 注意:1).步进如果是正数,那么下标1对应的字符的位置一定要在下标2对应的位置的前面;
2).步进如果是负数,那么下标1字符对应的位置一定要在下标2字符对应位置的后面 - 下标2对应的字符是取不到的
str2 = 'hellopython'
print (str2[0:5:2]) # hlo
print (str2[-1:5:-2]) # nhy
c.下标的省略
切片的时候,下标1和下标2是可以省略的
- 下标1省略:默认从开头开始获取(开头可能是字符串的第一个字符,也可能是字符串的最后一个字符
str3 = 'good good study,day day up'
print (str3[:4]) good
print (str3[:4:-1]) pu yad yad,yduts doog
- 下标2省略:从下标1位置开始获取,获取到结束(结束可能是字符串的最后一个字符,也可能是第一个字符)
print (str3[1:]) ood good study,day day up
print (str3[3::-1]) doog
print (str3[:]) good good study,day day up
print (str3[::-1]) pu yad yad,yduts doog doog
练习:要求讲一个字符串中所有下标是奇数位上的字符取出来(位数从0开始算)
str4 = '0123456789'
print (str4[1::2]) 13579
print (str4[::-2]) 97531
三、字符串的相关运算
1. + 运算符
python支持两个字符串的相加,其效果就是将两个字符串拼接在一起,产生一个新的字符串
- 注意:如果+的一边是字符串,那么另外一边也必须是字符串
print ('123' + 'abc')
str1 = 'world'
newstr = 'hello' + ' ' + str1
print (newstr)
print(10 + 'abc') TyperError:unsupported operand typ(s) for +:'int'
2.* 运算
字符串*整数:字符串重复多次
print ('abc'*2) abcabc
3.所有的比较运算符
str1 = 'abc'
print ( 'abc' == str1)
print (str1 != 'ab')
- 比较大小
str1 > str2;str1 < str2
让str1中的每一位的字符,分别和str2中的每一位字符依次比较。直到不同为止,再看不同字符中谁的编码值大或者小
print ('abcd' > 'abcde')
print ('陈' > '虹')
print (ord('陈'),ord('虹'))
4.in 和 not in
str1 in str2:判断str1是否在str2中(str2是否包含str1 / str1是否是str2的字串)
结果是 布尔值
print('abc' in 'abcdef')
print ('a' not in 'bcd')
5.获取字符串的长度
字符串的长度:指的是字符串中字符的个数
- len()内置函数
str3 = 'project'
print (len(str3),len('abc 123\n')) 7 8
- 补充:空串
str4 = ' '
str5 = " "
print (len(str4)) 0
print (str3[-1],str3[len(str3)-1]) t t
6.阻止转义
在字符串的最前面添加r/R可以阻止转义
print ('a\nb') a
b
print (r'a\nb') a\nb
print ('\\\n\\') \换行\
- 练习
str7 = r'\nabc123' 求 str7[3] b
str8 = 'abc123\\123' 求: str8[-5] 3
四、字符串相关的方法
python中的字符串提供了很多的内建函数
- 字符串.函数( )
- 注意:这些所有的函数的功能都不会影响原来字符串,而是产生一个新的字符串
str = 'hello python'
1.capitalize() 将字符串的第一个字符转换为大写
newstr = str.capitalize()
print (newstr) Hello python
2.center(width,fillchar)
让字符串变成width对应的长度,原内容居中,剩余的部分使用fillchar的值来填充
print ('abc'.center(8,'.')) ..abc...
3.rjust(width,fillchar)
让字符串变成width对应的长度,原内容靠右,剩余的部分使用fillchar的值来填充
num = '1'
new_num = num.rjust(3,'0')
print (new_num) 001
3.原字符串.count(str)
判断str值在原字符串中出现的次数
str1 = '12121212'
print (str1.count('1')) 4
4.字符串1.join(字符串2)
在字符串2中的每个字符之间插入一个字符串1
print ('aa'.join('0000')) 0aa0aa0aa0
5.str1.replace(old,new)
将str1中old部分全部替换成new
new_str = 'abcdefsa'.replace('a','?')
print (new_str) ?bcdefs?
五、python的字符串内建函数
1 .capitalize():将字符串的第一个字符转换为大写
str1 = 'teacher'
print (str1.capitalize()) Teacher
2 .center(width, fillchar):返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。
num = '123'
print (num.center(8,'*')) **123***
3 .count(str, beg= 0,end=len(string)):返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
print ('12332112'.count('1')) 3
10 .isalnum():如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False
print ('12335abcd'.isalnum()) True
print ('.........'.isalnum()) false
11 .isalpha():如果字符串至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False
print ('abcde'.isalpha()) True
print ('zxc12..'.isalpha()) False
12 .isdigit():如果字符串只包含数字则返回 True 否则返回 False
print ('13450'.isdigit()) True
13 .islower():如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
print ('Teacher'.islower()) False
14 .isnumeric():如果字符串中只包含数字字符,则返回 True,否则返回 False
print ('132154a'.isnumeric()) False
15 .isspace():如果字符串中只包含空白,则返回 True,否则返回 False.
print (' 1 1 2 1'.isspace()) False
16 .istitle():如果字符串是标题化的(见 title())则返回 True,否则返回 False
print ('Two'.istitle()) True
17 .isupper():如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
print ('TWO'.isupper()) True
18 .join(seq):以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
print('00'.join('111')) 1001001
19 .len(string):返回字符串长度
print (len('123321123456789')) 15
20 .ljust(width[, fillchar]):返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。
print ('123'.ljust(8,'*')) 123*****
21 .lower():转换字符串中所有大写字符为小写.
print ('TEACHER'.lower()) teacher
22 .lstrip():截掉字符串左边的空格或指定字符
print (' 123'.lstrip()) 123
print ('*****123'.lstrip('*')) 123
23 .maketrans():创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
print ('123'.maketrans('abc','789'))
29 .rjust(width,[, fillchar]):返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串
print ('123'.rjust(8,'*')) *****123
30 .rstrip():删除字符串字符串末尾的空格.
print ('123******'.rstrip('*')) 123
34 .strip():在字符串上执行 lstrip()和 rstrip()
print ('***123***'.strip())
35 .swapcase():将字符串中大写转换为小写,小写转换为大写 (和upper()作用一样)
print ('ASD'.swapcase()) asd
print ('zxc'.swapcase()) ZXC
36 .title():返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())
print ('teacher is good'.title()) Teacher Is Good
38 .upper():转换字符串中的小写字母为大写
print ('asd'.upper()) ASD
39 .zfill (width):返回长度为 width 的字符串,原字符串右对齐,前面填充0
print ('123'.zfill(8)) 00000123
40 .isdecimal():检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false
print ('1852asf'.isdecimal()) False
print ('124523'.isdecimal()) True
网友评论