• 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
    
  • 相关阅读:
    go 字符串转换
    GRU模型结构
    ElasticSearch实战系列八: Filebeat快速入门和使用---图文详解
    H5可视化编辑器(H5 Dooring)
    (转)如何防止Axios对我的请求参数进行编码?
    vue使用element-ui,如何给Label加标签
    vue中$router.push打开新窗口
    (转)webstorm配置svn
    打开gitee.com网站报错
    监控$route无效
  • 原文地址:https://www.cnblogs.com/portb/p/16754714.html
Copyright © 2020-2023  润新知