包含那零个或者多个字符的有序不可变
序列
特点:
有序性
:添加顺序和显示顺序一致,添加字符的适合,会设置编号,编号是从0 开始的,被称为索引、下标、角标【有索引、有切片】
不可变性
:在内存地址不变的情况下,字符串的内容不允许发生变化
如果字符串内容发生变化,内存地址一定发生变化
1.使用引号【一对单引号,一对双引号,一对三引号[预编译文本保持内容的原样输出]】
2.使用str()
构造
索引
通过索引获取对于的字符
操作:字符串[索引]
索引分为两种:正向,负向
正向索引
从左向右数
从0开始 到长度-1结束
负向索引
从右向左数
从-1开始 到-长度结束
s = '床前明月光,疑是地上霜。'
print(s,len(s)) # 床前明月光,疑是地上霜。 12
print(s[0]) # 床
print(s[9]) # 上
print(s[len(s)-1]) # 。
切片
操作:字符串[起始索引:结束索引:步长]
特点: 不包含结束位置
切片时根据索引来定位范围,获取范围中的子串
根据步长的正负性,分两种:
正向切片 :从左向右获取,步长为正
要求: 起始索引定位的字符要在结束索引定位的字符的左边(起始小于结束)
负向切片 :从右向左获取,步长为负
要求:起始索引定位的字符在结束索引定位的字符的右边
有些内容可以省略
1.省略:步长-----字符串[起始索引:结束索引]:表示步长为1,从左向右逐步获取
2.省略起始索引-----字符串[:结束索引:步长]
步长为正 :从左向右获取,表示从最左边开始
步长为负 :从右向左获取,表示从最右边开始
3.省略结束索引----字符串[起始索引::步长]
步长为正 :从左向右获取,表示到最右边结束
步长为负 :从右向左获取,表示到最左边结束
4.同时省略多个
遍历字符串
s = 'GJHUHBhjhyhu%^%*(&9g'
# 获取s中大写的英文字母的个数
c = 0
for i in s:
if 'A' <= i <='Z':
c += 1
print(c)
# 获取26个大写英文字母
print(string.ascii_uppercase) # ABCDEFGHIJKLMNOPQRSTUVWXYZ
# 获取26个小写英文字母
print(string.ascii_lowercase) # abcdefghijklmnopqrstuvwxyz
# 获取所有大小写字母
print(string.ascii_letters) # abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
# 获取所有数字
print(string.digits) # 0123456789
# 使用其他方法判断是否是大写
c = 0
for i in s:
# string.ascii_uppercase 获取26个大写英文字母
if i in string.ascii_uppercase:
c += 1
print(c)
遍历索引【应用场景:条件或者结论中和索引相关】
s = 'GJHUHBhjhyhu%^%*(&9g'
# 获取大写英文字母对应的索引
for i in range(0,len(s)):
# 获取索引对应的字母,判断是否是大写
if s[i] in string.ascii_uppercase:
print(i,end=' ') # 0 1 2 3 4 5
# 获取索引能被3或者4整除对应的字符
for j in range(len(s)):
if j%3 == 0 or j%4 == 0 :
print(s[j],end=' ') # G U H h h y % * ( 9
枚举遍历【最好用】enumerate()
可以同时获取索引和对应 的字符
s = 'GJHUHBhjhyhu%^%*(&9g'
for i in enumerate(s):
print(i) # i 是一个元组 ,第一个内容是索引,第二个是索引对应的字符
s = 'GJHUHBhjhyhu%^%*(&9g'
# 相当于拆包,pos代表索引,ele代表字符
for pos,ele in enumerate(s):
print(pos,ele)
s = 'GJHUHBhjhyhu%^%*(&9g'
for pos,ele in enumerate(s):
# 直接判断字符
if ele in string.ascii_uppercase:
# 直接输出索引
print(pos)
转义字符串
\
对一些符号进行转义
\n---newline 换行操作 将光标定位到下一行的值
\t---tab 横向制表符
\r---return 如果\r之前有内容,先把内容删除再写后面的内容
\v -- 纵向制表符
\f -- 翻页
\u -- unicode编码 win系统 c:\user
\' -- '
\" -- "
\\ -- \
字符串的获取
# 获取子串再字符串中第一次出现的位置
# 1.字符串对象.find(子串,起始索引,结束索引)
s = 'abcabcabc'
print(s.find('abc')) # 0
print(s.find('abc',1,)) # 3
print(s.find('abc',1,6)) # 3
#2.字符串对象.index(子串,起始索引,结束索引)
print(s.index('abc')) # 0
print(s.index('abc',1)) # 3
# 获取子串再字符串中最后一次出现的位置
# 1.字符串对象.rfind(字符串,起始索引,结束索引)
print(s.rfind('abc')) # 6
# 获取某个子串再字符串中出现的次数
print(s.count('abc')) # 3
s1 = 'ababababababab'
# 注意: 记得不是重叠的
print(s1.count('abab')) # 3
字符串的判断操作
判断是否是纯数字组成 .isdigit()
s1 = 'dfghj123'
s2 = '23456789'
print(s1.isdigit()) # False
print(s2.isdigit()) # True
判断是否是纯字母组成 .isalpha() 注意: 字母不仅指英文字母
s1 = '你好'
s2 = 'sadsc1232'
print(s1.isalpha()) # True
print(s2.isalpha()) # False
判断是否是纯数字或者纯字母 .isalnum() 注意;字母不仅指英文字母
# 结果为Ture 三种情况:纯数字、纯字母、数字+字母
s1 = '123'
s2 = 'sadsc'
s3 = 'wfwwfd1234'
print(s1.isalnum()) # True
print(s2.isalnum()) # True
print(s3.isalnum()) # True
判断字符串中的英文字母是否都是大写 .isupper()
s1 = '你好123abcASDJ'
s2 = '你好123ANJJ'
print(s1.isupper()) # False
print(s2.isupper()) # True(值判断英文字母,不管其他字符)
判断字符串中的英文字母是否都是小写 .islower()
s1 = '你好123abcASDJ'
s2 = '你好123dfgh'
print(s1.islower()) # False
print(s2.islower()) # True
# 判断内字符串中的内容是否都来源与ASCII表 .iaascii()
print(s1.isascii()) # False
# 判断是否首字母大写其他小写 .istitle()
s1 = 'How Are You'
print(s1.istitle()) # True
# 判断是否以指定内容开头 .startswith(指定内容)
print(s1.startswith('How')) # True
#判断字符串是否以多个内容中的一个开头
s1.startswith(('ow','Ar','Y')) # True
# 判断字符串是否以指定内容结尾 .endswith(指定内容)
print(s1.endswith('ou')) # True
# 判断字符串是否以对各内容中的其中一个结尾
print(s1.endswith(('re', 'ou'))) # True
编码和解码
# 编码方式
# gbk 汉字的编码,占2个字节
# utf-8 汉字的编码,占3个字节
#1.字符串的编码 ---字符窜对象.encode(编码方式)
s = '你好'
utf_s = s.encode('utf-8')
print(utf_s) # b'\xe4\xbd\xa0\xe5\xa5\xbd'
gbk_s = s.encode('gbk')
print(gbk_s) # b'\xc4\xe3\xba\xc3'
# 2.字符串的解码 ---字符串对象.decode(解码方式)
# 注意:用什么方式编码就用什么方式解码,否则会乱码挥着报错
print(utf_s.decode('utf-8')) # 你好
print(utf_s.decode('gbk')) # 浣犲ソ
print(gbk_s.decode('gbk')) # 你好
# 特点:对于ASCII中的符号,编码前后内容不变
# 判断字符串是否是纯英文组成
# 思路:先编码再判断
s1 = '你好abichj'
print(s1.encode('gbk').isalpha())
s2 = 'asdf'
print(s2.encode('gbk').isalpha())
# 判断字符串是否为数字或字母
# 思路:先编码再判断
print(s1.encode('gbk').isalnum())
print(s2.encode('gbk').isalnum())
# 判断是否是字母和数字
# 思路:数字或字母:纯数字、纯字母、数字和字母
s = 'ghjk1234'
print(s.isalnum() and not (s.isdigit()) and not (s.isalpha())) # True
字符串的转换
# 小写字母转化为大写 .upper()
s = 'How aRe yOu'
print(s.upper()) # HOW ARE YOU
# 大写转换为小写 .lower()
print(s.lower()) # how are you
# 大写转化为小写,小写转换为大写 .swapcase()
print(s.swapcase()) # hOW ArE YoU
# 首字母大写,其他字母小写 .capitalize()
print(s.capitalize()) # How are you
# 将每个单词的首字母大写,其他字母小写 .title()
print(s.title()) # How Are You