python--字符串)

python基础–字符串

字符串

概念及特点

​ 包含那零个或者多个字符的有序不可变序列

特点

有序性:添加顺序和显示顺序一致,添加字符的适合,会设置编号,编号是从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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值