- 字符串定义方式
- 如果我们想输出单引号或者双引号,直接在最外层包裹其他的字符串定义形式即可
- 输入: input
- 输出:print
- 字符串可以进行格式化处理: f-string 传统占位符形式拼接
str1 = 'hello ' \
'word'
print(str1) # 在一对引号里进行手动换行,无法打印出换行格式,必须使用转义字符\n \t等
str2 = '''hello
bigdata'''
print(str2) # 三对引号进行手动换行,可以打印输出换行格式,无需转义字符
print("I'm jack")
print('''我说:"I'm chinese!"''') # 当内容里有引号时注意外面引号的使用
字符串索引
- 索引就是系统给字符串中每一个元素的编号
- 正数索引:从0开始,从左至右依次递增
- 负数索引:从-1来时,从右至左依次递减
- 使用索引可以获取字符串中的元素
str1 = 'itheima'
# 需求:想获取第5个元素
print(str1[4])
# 需求:获取t
print(str1[1])
'''
i t h e i m a
# 正数索引
0 1 2 3 4 5 6
# 负数索引
-7 -6 -5 -4 -3 -2 -1
'''
# 需求:使用负数索引取 m
print(str1[-2])
字符串切片
# 切片格式:数据序列[起始位置索引:结束位置索引:步长],字符串、列表、元组都可切片
str1 = 'itheima'
# 需求:将the切片出来
str2 = str1[1:4:1] # 切片会新生产一个数据序列,不会对原有数据序列产生影响
print(str2)
# 包含起始位置,不含结束位置。大多数范围区间都是左闭右开区间,其余单独记忆。
print(str1[1:4]) # 步长为1可省略,步长的冒号也可省
print(str1[:4:1]) # 起始位置可省,步长为正,起始位置为字符串开始
print(str1[:3:-1]) # 起始位置省,步长为负,起始位置为字符串末尾
print(str1[5::1]) # 结束位置可省,步长为正,结束位置为字符串末尾
print(str1[5::-1]) # 结束位置省,步长为负,结束位置为字符串开头
print(str1[::-1]) # python中整个字符串反转方法
str3 = str1[:] # python中复制序列的方法
print(str3)
字符串查找方法和计数
# 查询到返回的都是正索引。index查不到会报错,find查不到不报错返回-1。count查找计数。
str1 = 'hello python' # 位置索引0到11
# index方法,格式:字符串序列.index(子串, 开始位置下标, 结束位置下标)
print(str1.index('p')) # 结果为6
print(str1.index('python')) # 结果为6
print(str1.index('o')) # 结果为4.有多个时返回从左往右第一个位置索引
print(str1.index('o', 5, 12)) # 结果为10,也就是后面这个o
print(str1.index('o', 5, 10)) # 报错,ValueError: substring not found
# 找不到对应子字符串。因为查找范围是左闭右开区间,不包含索引10.
# find方法,格式:字符串序列.find(子串, 开始位置下标, 结束位置下标)
print(str1.find('p')) # 结果为6
print(str1.find('python')) # 结果为6
print(str1.find('o')) # 结果为4.有多个时返回从左往右第一个位置索引
print(str1.find('o', 5, 11)) # 结果为10,也就是后面这个o
print(str1.find('o', 5, 10)) # 结果为-1,不会报错
# find查询,如果找不到子字符串返回的是-1.
# rfind和rindex,与find和index使用相同,只是查询方向是从右往左。
print(str1.rfind('o')) # 结果为10
print(str1.rindex('o')) # 结果为10
# count计数,格式:字符串序列.count(子串, 开始位置下标, 结束位置下标)
print(str1.count('o')) # 结果2次
print(str1.count('o', 6, 10)) # 结果0次,因为区间左闭右开,不含10.
print(str1.count('python')) # 结果1次
#练习:计算1-10000中出现7的次数(如:77计2次,777计3次)
# 方法一:用for循环
sum1 = 0
for i in range(1,10001):
sum1 = sum1 + str(i).count('7')
print(sum1)
# 方法二:把range所有元素放入列表中,转换为字符串后计数
print(str(list(range(1, 10001))).count('7'))
# 方法三:每个数位进行判断
sum1 = 0
for i in range(1, 10001):
if i % 10 == 7: # 个位是7
sum1 += 1
if i % 100 // 10 == 7: # 十位是7
sum1 += 1
if i % 1000 // 100 == 7: # 百位是7
sum1 += 1
if i // 1000 == 7: # 千位是7
sum1 += 1
print(sum1)
字符串的替换
str1 = 'hello python'
# 字符串替换格式:字符串.replace(old旧值,new新值,count替换次数)
print(str1.replace('o', '$')) # 不指定次数默认全替换
print(str1.replace('o', '$', 1))
print(str1.replace('o', '$', 10)) #指定次数过多也是全替换
字符串的拆分和合并
str1 = 'I love Python and java and c'
# 字符串拆分格式:字符串.split(sep分隔符,maxsplit最大分割次数)
# 拆分后会将结果以字符串形式保存到列表中
print(str1.split()) # ['I', 'love', 'Python', 'and', 'java', 'and', 'c']
# 可把split看作一把刀,砍3刀,分成4段
print(str1.split(' ', 3)) # 结果['I', 'love', 'Python', 'and java and c']
# 以'a'作为分隔符进行拆分,拆分次数60
# 谁作为分隔符,拆分后该分隔符消失,拆分次数过大则全部拆分
print(str1.split('a',60)) # 结果['I love Python ', 'nd j', 'v', ' ', 'nd c ']
# 字符串的合并格式:分隔符.join(iterable可迭代类型)
list1 = str1.split()
# 将list1按照指定分隔符❤合并为一个字符串
print('❤'.join(list1)) # 结果I❤love❤Python❤and❤java❤and❤c
# 进行join时,要注意可迭代类型中全部元素都要是字符串类型
list2 = [1,2,3,4,'adc']
print('❤'.join(list2)) # TypeError: sequence item 0: expected str instance, int found
字符串大小写转换
str1 = 'hello woRld aNd Python'
# capitalize:将字符串第一个字母大写,其余全部小写,对数字和汉字不做处理
print(str1.capitalize()) # Hello world and python
# title:将所有单词首字母大写,其余小写
print(str1.title()) # Hello World And Python
# Python中怎样对单词进行辨别:非字母都可以作为分隔符
str2 = 'hello中国python520world'
print(str2.title()) # Hello中国Python520World
# upper:将字符全部变为大写
print(str1.upper()) # HELLO WORLD AND PYTHON
print(str2.upper()) # HELLO中国PYTHON520WORLD
# lower:将字符全部变为小写
print(str2.lower()) # hello中国python520world
字符串两侧指定字符串删除
str1 = ' hello Python \t\n '
# strip如果不穿参,则去除字符串左右两侧的空白(含空格、换行、制表位等)
print(str1.strip()) # hello Python
# 传参格式:字符串.strip(chars可以传一个或多个字符)
str2 = ' $$ hello Python$$$$#12'
print(str2.strip('$#12 ')) # hello Python
# 结论:左右两侧的字符如果出现在传入的字符串中则删除,否则保留
# 和传入的字符顺序没有关系,遇到不属于传入内容就停止删除
str3 = '12314123123hello Python12314123123123'
print(str3.strip('123')) # 4123123hello Python12314
print(str3.strip('2431')) # hello Python
print(str3.strip('12345')) # hello Python
# rstrip:删除字符串右侧指定字符
print(str3.rstrip('1234')) # 12314123123hello Python
# lstrip:删除字符串左侧指定字符
print(str3.lstrip('1234')) # hello Python12314123123123
字符串对齐
str1 = 'Python'
# rjust:右对齐
print(str1.rjust(10)) # 字符串在右侧,不足位置用空格补齐
# 格式:字符串.rjust(width字符宽度,fillchar填充字符)
print(str1.rjust(10, '$')) # $$$$Python
# ljust: 左对齐
print(str1.ljust(10)) # 不指定填充字符,自动用空格补齐
print(str1.ljust(10, '$')) # Python$$$$
# center:居中对齐
print(str1.center(10, '$')) # $$Python$$
print(str1.center(11, '$')) # $$$Python$$
字符串判断
str1 = 'hello itcast'
# startswith 判断是否以...开头,结果为布尔值
# 格式:字符串.startswith(prefix判断开头的内容,start开始位置,end结束位置)
print(str1.startswith('he')) # True
print(str1.startswith('He')) # False
print(str1.startswith('al')) # False
# 可以指定范围,左闭右开区间。通常不指定范围。
print(str1.startswith('he', 6, 12)) # False
print(str1.startswith('it', 6, 12)) # True
# endswith 判断是否以...结尾
print(str1.endswith('st')) # True
print(str1.endswith('al')) # False
str2 = '123asd'
str3 = ' '
str4 = '123'
# is判断
# isalnum 判断是否全部为数字或字母,不能有空格
print(str1.isalnum()) # False
print(str2.isalnum()) # True
# isspace 判断是否全部为空格
print(str1.isspace()) # False
print(str3.isspace()) # True
# isnumeric isdecimal isdigit 都是判断是否全部为数字
print(str2.isnumeric()) # False
print(str4.isnumeric()) # True
print(str4.isdecimal()) # True
print(str4.isdigit()) # True
# isnumeric可以判断其他形式的数字
str5 = '123四肆④零'
print(str5.isnumeric()) # True
print(str5.isdecimal()) # False
print(str5.isdigit()) # False
# isidentifier判断是否为标识符
str6 = '2apple'
str7 = 'apple'
print(str6.isidentifier()) # False
print(str7.isidentifier()) # True
# isalpha判断是否全部为字母或汉字
str8 = 'apple中国'
print(str6.isalpha()) # False
print(str7.isalpha()) # True
print(str8.isalpha()) # True
# 如果强制判断字母和汉字区分开(了解)
print(str8.encode('utf-8').isalpha()) # False
print(str7.encode('utf-8').isalpha()) # True