• Python Day9 字符串进阶【零基础】


    Day9 字符串进阶

    1. 字符串相关方法

    字符串.xxx()

    1.1 字符串.join(序列)

    将序列中的元素用指定字符串拼接在一起形成一个新的字符串(序列中的元素必须是字符串,如果不是字符串,就把它变成字符串str())

    list1 = ['孙膑', '王昭君', '鲁班7号', '孙悟空']
    result = '%'.join(list1)
    print(result)
    
    result = '+'.join(list1)
    print(result)
    
    result = ' and '.join(list1)
    print(result)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    孙膑%王昭君%鲁班7号%孙悟空
    孙膑+王昭君+鲁班7号+孙悟空
    孙膑 and 王昭君 and 鲁班7号 and 孙悟空

    如果需要join的序列中的元素不是字符串,就想办法把它的元素变成字符串再join

    # 把下列数字连接成一个字符串
    nums = [23, 45, 67, 89, 45]
    result = ''.join([str(i) for i in nums])
    print(result)
    
    • 1
    • 2
    • 3
    • 4

    2345678945

    1.2 字符串1.split(字符串2)

    将字符串1中的字符串以字符串2作为切割点对字符串1进行切割(最后直接舍弃切割点),返回值是包含每一小段字符串的列表

    注意:字符串1.split(字符串2, N) - 切割的时候,N为多少就切几次

    1)正常情况下

    str1 = 'jshdmnuio456mn2dfjslmn656'
    result = str1.split('mn')
    print(result)
    
    • 1
    • 2
    • 3

    [‘jshd’, ‘uio456’, ‘2dfjsl’, ‘656’]

    2)连续出现两个切割点 - 会导致出现:‘’

    str1 = 'jshdmnmnuio456mn2dfjslmn656'
    result = str1.split('mn')
    print(result)
    
    • 1
    • 2
    • 3

    [‘jshd’, ‘’, ‘uio456’, ‘2dfjsl’, ‘656’]

    3)加N的时候

    str1 = 'jshdmnuio456mn2dfjslmn656'
    result = str1.split('mn', 2)
    print(result)
    
    • 1
    • 2
    • 3

    [‘jshd’, ‘uio456’, ‘2dfjslmn656’]

    1.3 字符串替换

    1)字符串1.replace(字符串2, 字符串3) - 将字符串1中所有的字符串2都替换成字符串3

    str1 = 'jshdmnuio456mn2dfjslmn656'
    result = str1.replace('mn', 'AAA')
    print(result)
    
    • 1
    • 2
    • 3

    jshdAAAuio456AAA2dfjslAAA656

    2)字符串1.replace(字符串2, 字符串3, N) - 将字符串1中前N个字符串2替换成字符串3

    str1 = 'jshdmnuio456mn2dfjslmn656'
    result = str1.replace('mn', 'AAA', 2)
    print(result)
    
    • 1
    • 2
    • 3

    jshdAAAuio456AAA2dfjslmn656

    替换为空格就相当于删除

    str1 = 'jshdmnuio456mnA2dfjslAAAmn656'
    result = str1.replace('mn', '', 2) 
    print(result)
    
    • 1
    • 2
    • 3

    jshduio456A2dfjslAAAmn656

    1.4 字符串.strip()

    删除字符串左右两端的空白字符(若给了参数,就去掉两端的参数)

    1)字符串.rstrip() - 去左端空白

    2)字符串.lstrip() - 去右端空白

    str1 = '\n\t          KathAmy          \n\t'
    print(str1)
    print('-----------------------------------华丽的分割线-----------------------------------')
    result = str1.lstrip()
    print(result)
    print('-----------------------------------华丽的分割线-----------------------------------')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    1.5 find、index

    1)字符串1.find(字符串2) - 获取字符串1中字符串2出现第一次的位置(以0开始的下标值返回),如果字符串2不存在,返回值为-1

    2)字符串1.index(字符串2) - 获取字符串1中字符串2出现第一次的位置(以0开始的下标值返回),如果字符串2不存在,报错!

    str1 = 'how are you? I am fine, thank you! and you?'
    print(str1.find('you'))
    print(str1.index('you'))
    
    • 1
    • 2
    • 3

    8
    8

    3)字符串1.find(字符串2, 开始下标, 结束下标) - 获取字符串1中指定范围内字符串2第一次出现的位置

    4)字符串1.index(字符串2, 开始下标, 结束下标)

    str1 = 'how are you? I am fine, thank you! and you?'
    print(str1.find('you', 10))    
    print(str1.find('you', 10, 26))  
    
    • 1
    • 2
    • 3

    30
    -1

    5)rfind、rindex:从尾端开始查

    str1 = 'how are you? I am fine, thank you! and you?'
    print(str1.rfind('you'))
    
    • 1
    • 2

    39

    1.6 判断字符串字母是大写还是小写

    a.字符串.isupper() - 判断字符串是否为大写字母

    b.字符串.upper() - 判断字符串改为大写字母

    c.字符串.islower() - 判断字符串是否为小写字母

    d.字符串.lower() - 判断字符串改为小写字母

    print('hjas'.islower())
    print('x'.islower())
    
    print('JKSS'.isupper())
    print('M'.isupper())
    
    print('a'.upper())
    print('M'.lower())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    True
    True
    True
    True
    A
    m

    1.7 其他方法

    1)字符串.casefold() - 返回所有字符为小写

    print('xxcvgHJUjh8234r7fucjx'.casefold())
    
    • 1

    xxcvghjujh8234r7fucjx

    2)字符串添补

    • 字符串.center(长度, ‘参数’) - 将字符串放中间,参数根据长度放两边

    • 字符串.rjust(长度, ‘参数’) - 将字符串放右边,参数根据长度放左边

    • 字符串.ljust(长度, ‘参数’) - 将字符串放左边,参数根据长度放右边

    • 字符串.zfill(长度) - 将字符串放右边,根据长度左边补0

    str1 = 'abc'
    print(str1.center(7, '+'))          # '++abc++'
    print(str1.rjust(7, '*'))           # '****abc'
    print(str1.ljust(7, '&'))           # 'abc&&&&'
    print(str1.zfill(7))                # '0000abc'
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3)字符串.count() - 统计字符串中指定字符的个数

    str1 = 'jschvujiboklfkednhwbsaghujzikmnbhvuiol,mnbvc'
    result = str1.count('m')
    print(result)
    
    • 1
    • 2
    • 3

    2

    4)判断字符串开始和结尾

    • 字符串.startwith() - 判断字符串是以某参数开头的
    • 字符串.endwith() - 判断字符串是以某参数结尾的
    str1 = 'mnabcmnmn123mnkplmn##mn'
    print(str1.startswith('ab'))
    print(str1.startswith('mn'))
    
    print(str1.endswith('abc'))
    print(str1.endswith('#mn'))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    False
    True
    False
    True

    5)字符串.format - 引用其他变量到字符串中(但是之后我们会学更简便的方法)

    name = 'Ziv'
    age = 18
    # 'xxx今年xx岁!'
    result = str.format('{}今年{}岁!', name, age)
    print(result)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Ziv今年18岁!

    6)判断字符串是否是数字

    • 字符串.isdigit() - 判断字符串是否为阿拉伯数字
    • 字符串.isnumeric() - 判断字符串是否是数字,什么类型的数字都可(汉字,阿拉伯,希腊等)
    print('23211'.isdigit())            
    print('232+11'.isdigit())          
    print('2323一'.isdigit())           
    
    • 1
    • 2
    • 3

    True
    False
    False

    print('2323'.isnumeric())       
    print('232a3'.isnumeric())        
    print('2323一十百万Ⅱ拾Ⅲ'.isnumeric())   
    
    • 1
    • 2
    • 3

    True
    False
    True

    1. maketrans 和 translate 组合使用,前者创建映射表,后者根据映射表对应着翻译为对应结果
      创建一个映射表
    str1 = '第1名'
    table = str.maketrans('1234567890', '一二三四五六七八九零')
    result = str1.translate(table)
    print(result)
    
    • 1
    • 2
    • 3
    • 4

    第一名

    str1 = '星期7'
    table = str.maketrans('1234567', '一二三四五六天')
    print(str1.translate(table))
    
    • 1
    • 2
    • 3

    星期天

    2. 字符串格式化

    字符串格式化是为了我们更快捷的组成和输出字符串!

    2.1 字符串拼接 - 普通拼接

    # xxx今年xx岁!月薪:xxxx.xx元
    name = input('请输入您的姓名:')
    age = input('请输入您的年龄:')
    pay = input('请输入您的薪资:')
    
    message = name + '今年' + str(age) + '岁!月薪:' + str(pay) + '元'
    print(message)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    请输入您的姓名:KathAmy
    请输入您的年龄:100
    请输入您的薪资:100000
    KathAmy今年100岁!月薪:100000元

    2.2 格式字符串

    格式字符串:包含一个或者多个格式占位符的字符串 % (数据1, 数据2, 数据3, …)

    说明:()中的数据必须和前面字符串中的占位符一一对应。如果只需要一个数据,那么()可以省略

    常用的占位符有哪些:

    • %s - 字符串占位符;可以给任何类型的数据占位(字符串占位符)
    • %d - 只能给数字数据占位(整数占位符)
    • %f - 只能给数字数据占位(浮点数占位符,默认保留6位小数)
    • %.Nf - 只能给数字数据占位(浮点数占位符,默认保留N位小数)
    # xxx今年xx岁!月薪:xxxx.xx元
    name = input('请输入您的姓名:')
    age = int(input('请输入您的年龄:'))
    pay = float(input('请输入您的薪资:'))
    result = '%s几年%d岁!薪资%.2f元!' % (name, age, pay)
    print(result)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    请输入您的姓名:KathAmy
    请输入您的年龄:120
    请输入您的薪资:1000000
    KathAmy几年120岁!薪资1000000.00元!

    2.3 f-string

    f-string的基本用法:如果在字符串的最外面加了f,就可以在字符串中通过{}来给字符串提供内容;{表达式} - 表达式的结果就是对应的字符串(变量)内容
    1)f ’ ’

    name = input('请输入您的姓名:')
    age = int(input('请输入您的年龄:'))
    pay = float(input('请输入您的薪资:'))
    print(f'{name}今年{age}岁!薪资{pay}元!')
    
    • 1
    • 2
    • 3
    • 4

    KathAmy今年120岁!薪资1000000.0元!

    2)f-string的参数:{提供数据的表达式:参数}

    a.控制小数位数(四舍五入)
    格式:{提供数据的表达式:.Nf}

    name = input('请输入您的姓名:')
    age = int(input('请输入您的年龄:'))
    pay = float(input('请输入您的薪资:'))
    print(f'{name}今年{age}岁!薪资{pay:.4f}元!')
    
    • 1
    • 2
    • 3
    • 4

    KathAmy今年120岁!薪资1000000.0000元!

    b.大金额逗号分割(千位符)

    money = 100000000000000
    result = f'金额:{money:,}元'
    print(result)
    
    result = f'金额:{money:,.2f}元'
    print(result)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    金额:100,000,000,000,000元
    金额:100,000,000,000,000.00元

    c.小数显示百分比

    scale = 0.84
    result = f'及格率:{scale:.2%}'
    print(result)
    
    • 1
    • 2
    • 3

    及格率:84.00%

    d.控制填充长度(实现center、rjust、ljust、zfill的功能)

    格式:

    • {提供数据的表达式:字符>长度}(填在左端)
    • {提供数据的表达式:字符<长度}(填在右端)
    • {提供数据的表达式:字符^长度}(填在两端)
    num = 3
    class_name = 'py2204'
    study_id = f'{class_name}{num:0>4}'
    print(study_id)  # py22040003
    
    study_id2 = f'{class_name}{num:x>6}'
    print(study_id2)  # py2204xxxxx3
    
    study_id3 = f'{class_name}{num:x<6}'
    print(study_id3)  # py22043xxxxx
    
    study_id4 = f'{class_name}{num:x^6}'
    print(study_id4)  # py2204xx3xxx
    
    study_id5 = f'{class_name}{num:>6}'
    print(study_id5)  # py2204     3
    
    result = f'编号:{num:0>7}'
    print(result)  # 编号:0000003
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 相关阅读:
    【Unity3D】动画混合
    【c语言】详解文件操作(一)
    验证服务器网络端口是否可访问
    Docker安装Apollo
    知识干货:基础存储服务新手体验营
    手摸手,带你实现移动端H5瀑布流布局
    uniapp:tabBar点击后设置动画效果
    linux系统下切换源
    Snowflake8亿美元收购Streamlit,联手构建基于数据的应用程序
    PyCharm连接MySQL数据库竟然如此简单
  • 原文地址:https://blog.csdn.net/qq_67780151/article/details/126062446