XX学Python·字符串

  • 字符串定义方式
    • 一对单引号
    • 一对双引号
    • 三对单引号
    • 三对双引号
  • 如果我们想输出单引号或者双引号,直接在最外层包裹其他的字符串定义形式即可
  • 输入: 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
posted @ 2022-10-04 22:44  PORTB  阅读(25)  评论(0编辑  收藏  举报