字符串的学习

一、字符串的定义

定义:

空字符串:
字符串名=str() 字符串名=''  或者 字符串名=""   或者  字符串名='''''' 或者  字符串名=""""""

非空字符串:
字符串名='内容' 或者 字符串名="内容"   或者  字符串名='''内容''' 或者  字符串名="""内容"""

示例:

# 定义空字符串
s = str()
s1 = ''
s2 = ""
s3 = ''''''
s4 = """"""
# 定义非空字符串
s5 = '传智'
s6 = "黑马"
s7 = '''传智
教育
'''
s8 = """黑马
程序员
"""
print(s)
print(s1)
print(s2)
print(s3)
print(s4)
print(s5)
print(s6)
print(s7)
print(s8)

二、字符串的下标索引

知识点:
下标索引: 就是咱们说的编号,也就是容器中每个元素的编号

正索引: 从0开始,从左到右,依次递增

负索引: 从-1开始,从右到左,依次递减

根据下标索引查找对应元素格式:  字符串[索引]

示例:

# 需求: 定义非空字符串
name = '门头沟大学'
# 需求: 查询第一个位置的元素/字符
print(name[0])
print(name[-5])
# 需求: 查询最后一个位置的元素/字符
print(name[-1])
print(name[4])
# 注意: 如果访问了不存在的索引就会报错: 索引越界异常
print(name[5])  # IndexError: string index out of range

三、字符串的常用操作

字符串是不可变类型

1、知识点:

字符串是不支持修改的(元素的增删改操作不支持的)

类似列表和元组的查询操作:
	字符串[索引]: 查找指定索引位置上的元素
	字符串名.count(元素): 查找指定元素在字符串中出现的次数    
	字符串名.index(元素):从左往右查找指定元素在字符串中的索引位置,返回第一个正索引,如果不存在就报错
	len(字符串名): 查询当前元组中所有元素的总个数
	
特有查询操作:
   字符串名.rindex(元素):从右往左查找指定元素在字符串中的索引位置,返回第一个正索引,如果不存在就报错
   字符串名.find(元素):从左往右查找指定元素在字符串中的索引位置,返回第一个正索引,不存在就返回-1
   字符串名.rfind(元素):从右往左查找指定元素在字符串中的索引位置,返回第一个正索引,不存在就返回-1
	
其他特有操作:
	replace:替换
	split: 切割
	join: 连接
	strip: 去除
	startswitch: 以...开头
	endswitch: 以...结尾
	upper: 大写
	lower: 小写

2、查询操作


# 需求: 定义非空字符串
s1 = '清华大学是国内很好的大学'
# 需求: 查找第二个位置上的字符
print(s1[1])
# 需求: 查询该字符串中有多少个字符
print(len(s1))
# 需求: 查询'大'出现的次数
print(s1.count('大'))
# 需求: 查询'育'出现的索引位置
print(s1.index('大'))  # 从左往右找,返回第一个正索引  3
# 注意: 如果访问了不存在就会报错
# print(s1.index('你')) # 报错 ValueError: substring not found

# 拓展
# 和列表元组查询操作不同的查询操作
print(s1.rindex('大'))  # 从右往左找,返回第一个正索引  11
# print(s1.rindex('你')) # 报错 ValueError: substring not found

# 因为index和rindex如果找不到就报错,会影响程序继续执行,字符串中提供了find和rfind解决了此问题
print(s1.find('大')) # 3
print(s1.find('你'))  # 不报错,如果找不到直接返回-1,不影响后续代码执行
print(s1.rfind('大')) # 11
print(s1.rfind('你'))  # 不报错,如果找不到直接返回-1,不影响后续代码执行

3、其他特有操作

"""
大字符串.replace(旧子串,新子串): 把大字符串中所有的旧子串替换为新子串
"""
# 需求: 聊天敏感词替换,举例: '你TMD的哦'变成'你***的哦'
s1 = '你TMD的哦'
s2 = s1.replace('TMD', '***')
print(s2)
# 思考:如果多个敏感词怎么替换? 使用链式编程
# 举例: '你TMD的哦,真sb呀' 变成 你***的哦,真**呀
s3 = '你TMD的哦,真sb呀'
s4 = s3.replace('TMD', '***').replace('sb', '**')
print(s4)

"""
大字符串.split(分隔符,切几次): 根据指定分隔符把一个大字符串切割成多个小字符串,放到列表中返回
                           注意: 默认切割所有
"""
# 需求: 切水果案例
# 举例: 已知大字符串'苹果-梨-橘子-香蕉',把每个水果单独切割出来房东容器中返回
s5 = '苹果,梨,橘子,香蕉'
fruit_list = s5.split(',')
print(fruit_list, type(fruit_list))

"""
'分隔符',join(可迭代对象): 使用指定分隔符把可迭代对象中每个元素连接到一起,生成字符串返回
"""
s6 = ','.join(['苹果', '梨', '橘子', '香蕉'])
print(s6, type(s6))


"""
大字符串.strip(): 默认去除大字符串两端的空白,当然也可以指定要去除两端的字符
大字符串.lstrip(): 默认去除大字符串左端的空白
大字符串.rstrip(): 默认去除大字符串右端的空白
"""
name = '张三'
user_name = ' 张三     '
print(name == user_name)  # False
print(name == user_name.strip())  # True
pwd = '123'
user_pwd = '%123%'
print(pwd == user_pwd)  # False
print(pwd == user_pwd.strip('%'))  # True

"""
大字符串.startswitch(子串): 判断大字符串是否以指定的子串开头
大字符串.endswitch(子串): 判断大字符串是否以指定的子串结尾
"""
# 定义姓名列表,存储多个姓名
name_list = ['张一山', '郭靖', '张无忌', '张翠山', '黄蓉']
# 遍历列表,判断如果以张开头并且以山结尾的打印出来
for name in name_list:
    if name.startswith('张') and name.endswith('山'):
        print(name)

"""
字符串.upper(): 把字符串中所有的字母都转换为大小大写字母
字符串.isupper() : 判断是否是大写
字符串.lower(): 把字符串中所有的字母都转换为大小小写字母
字符串.islower() : 判断是否是小写
"""
# 定义字符串
ss = 'abc123CDE中国'
# 把所有字母转为大写
print(ss.upper())
print('ABC'.isupper())
# 把所有字母转为小写
print(ss.lower())
print('abc'.islower())

四、字符串的遍历

知识点:

1.for循环遍历
	for 元素名 in 字符串:
		操作元素
		
2.while循环遍历
	核心思想: 利用while变量作为字符串的索引使用
	index = 0
	while index < len(字符串):
		元素名 = 字符串[index]
		操作元素
		index+=1
		
3.对比
while循环和for循环,都是循环语句,但细节不同:
在循环控制上:
    while循环可以自定循环条件,并自行控制
    for循环不可以自定循环条件,只可以一个个从容器内取出数据
在无限循环上:
    while循环可以通过条件控制做到无限循环
    for循环理论上不可以,因为被遍历的容器容量不是无限的
在使用场景上:
    while循环适用于任何想要循环的场景
    for循环适用于,遍历数据容器的场景或简单的固定次数循环场景

示例:

# 定义字符串
name = '门头沟大学'
# for循环遍历
for n in name:
    print(n)

print('-------------')
# while循环遍历
# 核心: 利用while循环变量作为字符串的下标索引
index = 0
while index < len(name):
    n = name[index]
    print(n)
    index += 1

五、字符串的特点

可以存储多个元素
只能存储字符串类型
支持下标索引
不支持修改
支持重复
支持for循环
支持while循环

六、Python 的字符串内建函数

字符串方法是从 Python1.6 到 2.0 慢慢加进来的 —— 它们也被加到了Jython 中。这些方法实现了 string 模块的大部分方法,如下表所示列出了目前字符串内建支持的方法,所有的方法都包含了对 Unicode 的支持,有一些甚至是专门用于 Unicode 的。

方法描述
string.capitalize()把字符串的第一个字符大写
string.center(width)返回一个原字符串居中,并使用空格填充至长度 width 的新字符串
string.count(str, beg=0, end=len(string))返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
string.decode(encoding=‘UTF-8’, errors=‘strict’)以 encoding 指定的编码格式解码 string,如果出错默认报一个 ValueError 的 异 常 , 除非 errors 指 定 的 是 ‘ignore’ 或 者’replace’
string.encode(encoding=‘UTF-8’, errors=‘strict’)以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是’ignore’或者’replace’
string.endswith(obj, beg=0, end=len(string))检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.
string.expandtabs(tabsize=8)把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8。
string.find(str, beg=0, end=len(string))检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1
string.format()格式化字符串
string.index(str, beg=0, end=len(string))跟find()方法一样,只不过如果str不在 string中会报一个异常.
string.isalnum()如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False
string.isalpha()如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False
string.isdecimal()如果 string 只包含十进制数字则返回 True 否则返回 False.
string.isdigit()如果 string 只包含数字则返回 True 否则返回 False.
string.islower()如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
string.isnumeric()如果 string 中只包含数字字符,则返回 True,否则返回 False
string.isspace()如果 string 中只包含空格,则返回 True,否则返回 False.
string.istitle()如果 string 是标题化的(见 title())则返回 True,否则返回 False
string.isupper()如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
string.join(seq)以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
string.ljust(width)返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串
string.lower()转换 string 中所有大写字符为小写.
string.lstrip()截掉 string 左边的空格
string.maketrans(intab, outtab)maketrans()方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
max(str)返回字符串 str 中最大的字母。
min(str)返回字符串 str 中最小的字母。
string.partition(str)有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组 (string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string.string.replace(str1, str2, num=string.count(str1))
string.rfind(str, beg=0,end=len(string) )类似于 find() 函数,返回字符串最后一次出现的位置,如果没有匹配项则返回 -1。
string.rindex( str, beg=0,end=len(string))类似于 index(),不过是返回最后一个匹配到的子字符串的索引号。
string.rjust(width)返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串
string.rpartition(str)类似于 partition()函数,不过是从右边开始查找
string.rstrip()删除 string 字符串末尾的空格.
string.split(str=“”, num=string.count(str))以 str 为分隔符切片 string,如果 num 有指定值,则仅分隔 num+1 个子字符串
string.splitlines([keepends])按照行(‘\r’, ‘\r\n’, ‘\n’)分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
string.startswith(obj, beg=0,end=len(string))检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查.
string.strip([obj])在 string 上执行 lstrip()和 rstrip()
string.swapcase()翻转 string 中的大小写
string.title()返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())
string.translate(str, del=“”)根据 str 给出的表(包含 256 个字符)转换 string 的字符, 要过滤掉的字符放到 del 参数中
string.upper()转换 string 中的小写字母为大写
string.zfill(width)返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0
  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

早安Naor

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值