1.什么是字符串(str)
- 1)字符串
- 字符串是容器型数据类型(序列);以单引号或者双引号作为容器的标志(引号中所有的内容都属于字符串的元素)
- 'abc' > 元素分别是'a','b','c'三个元素
- 'a,b,c' > 元素分别是'a', ',', 'b', ',', 'c'五个元素
- 特点:不可变(不支持增删改) , 有序(支持下标操作)
- 2)元素:
- 字符串中元素又叫字符,python中有字符的概念,但是没有字符类型,长度是1的字符串就可以看成字符.
a.普通字符:
字母/数字/各国的文字和符号等(可以写在引号中的符号)
b.转义字符:
在字符串中在一些特定的符号前加\来表示特殊功能和意义
- :将\后面的内容转化为字符 \ > \ , ' > ' , " > "
- \n:换行操作
- \t:空格操作
- 注意:转义字符的长度为1
c.编码字符:
\u+4位的十六进制数 - 将4位十六进制数对应的编码值转换为字符
1)字符编码
计算机只有直接存储数字的能力,不能直接存储字符:
当需要计算机存储支付的时候,实质存的是字符对应的固定的数字,这个数字就是字符在计算机中的编码
每一个字符和数字的对应关系叫做编码表
2)ASCII码表和Unicode编码表
- ASXII码表是由美国国家标准制定的专门针对美国富豪进行编码的,里面值包含一些特殊符号、字母和数字(不包含中文、日语等)
- ASCII码表中大写字母在小写字母前,且中间不连续
- python采用的是Unicode编码表:Unicode编码表是对ASCII码表的扩展,包含了世界上所有国家所有语言的符号(又叫万国码)
- 中文范围:0x4e00 - 0x9fa5
3)字符编码相关方法
- chr(编码值) - 将编码值转换成字符
- ord(字符) - 获取字符对应的编码值
"""
练习,如果字符串中想打印引号,可以在引号前加\
str1 = 'abc\'123' # abc'123
str2 = 'abc\t123' # abc 123
str3 = 'abc\\123' # abc\123
str4 = '\u4e00' # 一
2.字符串操作
1.获取字符 - 和列表获取元素一样
1)获取单个字符
2)字符串切片 - 和列表切片一样
3)遍历
练习:统计一个字符串中小写字母的个数
str2 = 'asdfgASDFGHasd'
count = 0
for str in str2:
if 97 <= ord(str) <= 122:
count += 1
print(count)
2.字符串操作
1) + 和 *
- 字符串1 + 字符串2 -> 将字符串1和字符串2拼接在一起产生一个新的字符串
- 字符串 * N -> 字符串拼接N次产生一个新的字符串
str1 = 'abc'
str2 = '123'
print(str1 + str2) # abc123
print(str1 * 3) # abcabcabc
2)==, !=
print('abc' == 'acb') # False
print('abc' == 'abc') # True
3)> < >= <=
- 执行两个字符串比较大小(实际上从前往后找到第一组不相等的字符,比较字符的编码值的大小)
- ‘0’ <= char <= '9' - 判断是否是数字字符
- 'a' <= char <= 'z' - 判断是否是小写字母
- 'A' <= char <= 'Z' - 判断是否是大写字母
- '\u4e00' <= char <= '\u9fa5' - 判断是否是汉字
print('abc' > 'bc') # False
print('abcf' > 'abcd') # True
print('何' > '哈') # True
4)in/not in
- 字符串1 in 字符串2 -> 判断字符串2中是否包含字符串1(判断字符串1是否是字符串2的子串)
print('ab' in 'abcdef') # True
print('abcde' in 'abc') # False
print('ab' in 'agseb') # False
5)len, max, min, sorted, str
- 注意:转义字符和编码字符的长度都是1
- max min求的是字符串中编码最大/最小的字符
- sorted按照编码大小排序,结果返回的是列表
- 字符串的转换:所有的数据都可以转换成字符串,转换的时候是将数据放在引号中的
str3 = 'how are you!'
print(len(str3))
print(max(str3)) # y
print(sorted(str3)) # [' ', ' ', '!', 'a', 'e', 'h', 'o', 'o', 'r', 'u', 'w', 'y']
6).r语法
- 在字符串的最前面加r/R可以阻止字符串中所有的转义字符转义
str4 = r'ad\netrwe\'df\tdjfi'
print(str4) # ad\netrwe\'df\tdjfi
7)格式字符串
- 在字符串中用格式占位符表示字符串中不确定的部分
a.语法:
包含格式占位符的字符 % (数据1,数据2,...) - 后括号中数据的个数和类型要和前面格式占位符一一对应
b.格式占位符
%s - 字符串
%d - 整数
%.Nf - 浮点数(N控制小数点后小数的位数)
%c - 字符(如果是数字,会将数字当做编码并转义成字符)
注意:所有的数据都可以用%s作为占位符
补充:format
'{}{名字}{编号}'.format(名字 = '','')
name = input('请输入姓名')
print(name + ',你好!', '%s,你好!'%name)
format的用法
print('{}是一个{}岁的{}'.format('小米','23','女孩子')) # 小米是一个23岁的女孩子
print('{0}是一个{2}岁的{1}'.format('小米','女孩子','23')) # 小米是一个23岁的女孩子
print('{name}是一个{age}岁的{gender}'.format(age='23',name='小米',gender='女孩子')) # 小米是一个23岁的女孩子
字符串的相关方法
1.对齐方式
- 居中:
字符串.center(宽度,填充字符=' ') - 左对齐:
字符串.ljust(宽度,填充字符=' ') - 右对齐:
字符串.rjust(宽度,填充字符=' ' ) - 左填充(用0填充到指定宽度):
字符串.zfill(宽度) == 字符串.rjust(宽度,0)
str1 = 'abc'
print(str1.center(10,'+')) # 居中:+++abc++++
print(str1.ljust(10,'+')) # 左对齐:abc+++++++
print(str1.rjust(10,'+')) # 左对齐:+++++++abc
print(str1.zfill(10)) # 左填充:0000000abc
2.统计子串的个数
- 字符串1.count(字符串2) - 统计字符串1中字符串2出现的次数
str1 = 'how are you! Im fin thank you and you '
print(str1.count('you')) # 3
print(str1.count('r')) # 1
print(str1.count('you',0,-5)) # 2 在指定位置的you出现的次数
3.查找指定子串并返回下标
- 字符串.find(子串) 或者 字符串.index(子串)
print(str1.find('you')) # 8 不存在不报错
print(str1.index('you')) # 8 不存在会报错
4.连接:join
- 字符串.join(序列) - 将序列中的元素用字符串连接产生一个新的字符串
- 要求序列中的元素必须是字符串,如果是字典,要求key全是字符串
new_str1 = '+'.join('123')
print(new_str1) # 1+2+3
5.替换
- 字符串1.replace(字符串2,字符串3) - 将字符串1中所有的字符串2都替换成字符串3
- 字符串1.replace(字符串2,字符串3,N) - 将字符串1中前N个字符串2都替换成字符串3
str1 = 'how are you! Im fin thank you and you '
new_str1 = str1.replace('you','YOU')
new_str2 = str1.replace('you','YOU',2)
print(new_str1) # how are YOU! Im fin thank YOU and YOU
print(new_str2) # how are YOU! Im fin thank YOU and you
6.字符串切割
- 字符串1.split(字符串2) - 将字符串2作为切割点切割字符串1
str1 = 'how are you! Im fine thank you and you '
print(str1.split(' ')) # ['how', 'are', 'you!', 'Im', 'fine', 'thank', 'you', 'and', 'you', '', '']
print(str1.split('!')) # ['how are you', ' Im fine thank you and you ']
print(str1.split()) # ['how', 'are', 'you!', 'Im', 'fine', 'thank', 'you', 'and', 'you']
字符串中其它方法
str1 = 'how are you! Im fine thank you and you'
# 将字符串第一个字符大写
print(str1.capitalize())
# 字符串1.endwith(字符串2,开始位置,结束)
# 判断在字符串1中从开始到结束位置,字符串是否以指定字符结尾
print(str1.endswith('you')) # True
print(str1.endswith('you',0,18)) # False
# 判断在字符串1中从开始到结束位置,字符串是否以指定字符开始
print(str1.startswith('you'))
# 字符串.isalnum()
# 判断一个不为空的字符串中是否所有字符都是字母或者数字
print(str1.isalnum()) #False
# 字符串.isalpha()
# 判断一个不为空的字符串中是否所有字符都是字母或者数字
print(str1.isalpha()) #False
# 判断一个不为空的字符串中是否只包含十进制数字
print(str1.isdecimal()) #False
# 判断一个不为空的字符串中是否只包含数字
print(str1.isdigit()) #False
# 判断一个不为空的字符串中是否全为小写
print(str1.islower()) #False
# 判断一个不为空的字符串中是否全为大写
print(str1.isupper()) #False
# 将字符串中所有小写字符转化为大写
print(str1.upper()) #HOW ARE YOU! IM FINE THANK YOU AND YOU
# 将字符串中所有大写字符转化为小写
print(str1.lower()) #how are you! im fine thank you and you
# 翻转字符串中的大小写
print(str1.swapcase()) # HOW ARE YOU! iM FINE THANK YOU AND YOU
# 删除字符串开始和末尾的空格,有r和l
print(str1.strip())