Python入门学习(五)字符串的操作

Python入门

Python开发工具的使用:Pycharm的配置使用


第一章:Python入门学习(一)Print函数、Input函数、基本数据类型、运算符、流程控制语句、循环语句
第二章:Python入门学习(二) 列表的增删改查
第三章:Python入门学习(三) 字典的增删改查
第四章:Python入门学习(四)元组与集合
第五章:Python入门学习(五)字符串的操作
第六章:Python入门学习(六)函数学习
第七章:Python入门学习(七)Python异常处理机制
第八章:Python入门学习(八)Python中的类和对象
第九章:Python入门学习(九)Python面向对象的三大特征封装、继承和多态
第十章:Python入门学习(十)Python模块化编程
第十一章:Python入门学习(十一)Python的IO操作


第十二章:Python进阶学习(一)_学生信息管理系统项目


代码仓库地址:Python入门项目

一、字符串类型

在Python中字符串是基本数据类型,是一个不可变的字符序列。

字符串的驻留机制

仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串值保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量。
在这里插入图片描述

字符串的驻留机制:
仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串值保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量。
在这里插入图片描述

驻留机制的几种情况:(交互模式,即命令行模式)
  1.字符串的长度为0或者12.符合标识符(字符、数字、下划线)的字符串
  3.字符串只在编译时驻留,而非运行时
  4.[-5,256]之间的整数数字

打开Python Console控制台,使用命令行输入。
在这里插入图片描述

2.符合标识符(字符、数字、下划线)的字符串
在这里插入图片描述
百分号不是标识符,所以两个不相等。
在这里插入图片描述
4.[-5,256]之间的整数数字
在这里插入图片描述
在这里插入图片描述
之前我们可以看到,abc% 不是标识符,是不相等的,但是sys中的intern方法强制将两个字符串指向同一个对象

import sys
a = 'abc%'
b = 'abc%'
a is b
False
a = sys.intern(b)
a is b
True

在这里插入图片描述

字符串驻留机制的优点

当需要值相同的字符串时,可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提升效率和节约内存,因此拼接字符串和修改字符串是会比较影响性能的。
在需要进行字符串拼接时建议使用str类型的join方法,而非+,因为join()方法是先计算出所有字符串中的长度,然后在拷贝,只new一次对象,效率要比+

二、字符串的常用操作

字符串的查询操作

在这里插入图片描述

"""
字符串查询操作:
  1.index   查找子串第一次出现的位置    如果没有 抛出异常
  2.find    查找子串第一次出现的位置    如果没有 返回-1
  3.rindex  查找子串最后一次出现的位置   如果没有 抛出异常
  4.rfind   查找子串最后一次出现的位置   如果没有 返回-1
"""
s = 'hello,hello'
print(s.index('lo'))
print(s.find('lo'))
print(s.rfind('lo'))
print(s.rindex('lo'))
# print(s.index('loo'))   # 如果没有 抛出异常
print(s.find('loo'))      # 如果没有 返回-1

在这里插入图片描述
在这里插入图片描述

字符串的大小写转换

在这里插入图片描述

"""
字符串大小写转换
 1.转成大写                 upper
 2.转成小写                 lower
 3.大转小,小转大              swapcase
 4.把第一个字符转换成大写,其余小写         capitalize
 5.把每个单词的第一个字符转换成大写,把每个单词的剩余字符转成小写   title
"""
s = 'hello'
print(s.upper())  # HELLO
s = 'HELLO'
print(s.lower())  # hello
s = 'helloWORLD'
print(s.swapcase()) # HELLOworld
print(s.capitalize()) # Helloworld
s = 'hello WORLD'
print(s.title())  # Hello World

在这里插入图片描述

字符串的对齐操作

在这里插入图片描述

"""
字符串的对齐操作
    1.center 居中对齐   第二个参数默认为空格
    2.ljust  左对齐    第二个参数默认为空格
    3.rjust  右对齐    第二个参数默认为空格
    4.zfill  右对齐   左边用0对齐,该方法只接收一个参数,用于指定字符串的宽度,如果指定宽度小于字符传本身,则返回该字符串
"""
s = 'Hello,Python'
print(s.center(20,"*"))   # ****Hello,Python****
print(s.center(20))			#     Hello,Python    
print(s.ljust(20,"*"))      # Hello,Python********
print(s.rjust(20,"*"))      # ********Hello,Python
print(s.zfill(20))          # 00000000Hello,Python

在这里插入图片描述

字符串的分割操作

 szhi

"""
字符串的分割
    1.split  从字符串左边开始分割 默认是空格 返回的值都是列表 通过参数sep指定分割符,通过maxsplit指定最大分割次数,经过最大分割次数后,剩余的子串会单独作为一部分
    2.rsplit 从右边开始分割
"""
s = "hello Python hello"
print(s)
print(s.split()) # 默认分割符是空格   返回的结果是列表  ['hello', 'Python', 'hello']
s = "hello,Python,hello"
print(s)
print(s.split(','))  #以逗号作为分隔符   ['hello', 'Python', 'hello']
print(s.split(sep=',',maxsplit=1))

在这里插入图片描述

字符串的判断操作

在这里插入图片描述

"""
判断字符串操作的方法:
    1.判断指定字符串是不是合法的标识符(合法的标识符是:字母、数字。下划线)  isidentifier
    2.判断指定字符串是否全部由空白字符组成(回车、换行、水平制表符)   isspace
    3.判断指定的字符串是否全部字母组成                           isalpha
    4.判断指定字符串是否全部由十进制的数字组成(只能是12319)                     isdecimal
    5.判断指定字符串是否全部由数字组成(包括罗马数字:I II V、汉字数字:一二三四)                         isnumeric
    6.判断指定字符串是否全部由字母和数字组成                       isalnum
"""
s  = 'hello,Python'
print("判断'hello,Python'是不是合法的标识符",s.isidentifier())
s = '\n\t\r'
print("判断'\n\t\r'是否全部由空白字符组成",s.isspace())
s = 'asda'
print("'asda'是否全部字母组成",s.isalpha())
s = '123'
print("'123'是否全部由数字组成",s.isalnum())
print("'123'是否全部由十进制的数字组成",s.isdecimal())
s = '123四'
print("'123四'是否全部由十进制的数字组成",s.isdecimal())
print("'123四'是否全部由数字组成",s.isnumeric())
s = 'asda121'
print("'asda121'是否全部字母组成",s.isalpha())
print("'asda121'是否全部由数字组成",s.isnumeric())
print("'asda121'是否全部由字母和数字组成",s.isalnum())
print("'asda121'是否全部由数字组成",''.isnumeric())

字符串的替换和拼接操作

字符串替换调用replace方法  第一个参数:原字符串中的子串     第二个参数:要替换成的子串   第三个参数:指定最大替换次数

字符串的合并调用join方法   将元组或列表中的字符串合并成一个字符串
# 字符串替换   replace  第一个参数:原字符串中的子串     第二个参数:要替换成的子串   第三个参数:指定最大替换次数
s = 'HelloWorld'
print(s)
print(s.replace('World','Python'))
s = 'Hello,Java,Java,Java'
print(s.replace('Java','Python',2))
# 字符串 的合并 join   将元组或列表中的字符串合并成一个字符串
lst = ['hello','Java','Python']
print('|'.join(lst),type('|'.join(lst)))  # hello|Java|Python  <class 'str'>
print(''.join(lst),type(''.join(lst)))   # helloJavaPython     <class 'str'>

在这里插入图片描述

字符串的比较操作

运算符:>、>=、<、<=、=、==、!=
比较规则:
首先比较两个字符串中的第一个字符,如果相等则会继续比较下一个字符,依次比较下去,知道两个字符串中的字符不相等时,其比较的结果就是来哥哥字符串的比较结果,两个字符串中的所有后续字符将不再被比较。
比较原理:
两个字符串进行比较时,比较的是其ordinal value(原始值),调用内置函数ord可以得到指定字符的ordinal value。与内置函数对应的是内置函数chr,调用内置函数chr时指定ordinal value可以得到其对应的字符。

"""
字符串的比较
运算符:>、>=、<、<=、=、==、!=
比较规则:
首先比较两个字符串中的第一个字符,如果相等则会继续比较下一个字符,依次比较下去,知道两个字符串中的字符不相等时,其比较的结果就是来哥哥字符串的比较结果,两个字符串中的所有后续字符将不再被比较。
比较原理:
两个字符串进行比较时,比较的是其ordinal value(原始值),调用内置函数ord可以得到指定字符的ordinal value。与内置函数对应的是内置函数chr,调用内置函数chr时指定ordinal value可以得到其对应的字符。
"""
print('apple'>'app')        # True
print('apple'>'banana')    # False
print(ord('a'),ord('b'))   # 97 98
print(chr(97),chr(98))      #a b

在这里插入图片描述

'''
==与is的区别
==比较的是value
is比较的是id是否相等
'''
a = b = 'Python'
c = 'Python'
print(a == b)
print(a == c)
print(a is b)
print(a is c)
# 即 a,b,c 在内存空间中指向的是同一个对象

字符串的切片操作

字符串是不可变类型,不具备增删改操作,切片操作将产生新对象

"""
字符串切片操作 [start:stop:step]
s[5:]   如果不指定起始位置 索引将从0开始  ;s[:6]   如果不指定结束位置 索引将到最后
"""
s = 'hello,world'
print(s)                # hello,world
print(s[:5])            # hello  索引从0开始  到5结束 但是不包含索引为5的字符
print(s[6:])            # world  索引从6开始   到最后结束
print(s[1:5:1])         # ello   索引从1开始到5 结束 不包括5  步长为1
print(s[::2])         # el        索引从0开始到最后结束 包括最后一个元素  步长为2
print(s[::-1])         # dlrow,olleh  开始 结束都为默认 ,默认从最后一位字符开始,因为步长为负数

格式化字符串

格式化字符串的两种方式:
    1.%做占位符  '我叫%s,今年%i岁了' % (name,age)   str类型占位符:%s  int类型占位符:%i或%d  浮点数类型占位符:%f
    2.{}做占位符 '我叫{0},今年{1}岁了'.format(name,age)
    3.f'我叫{name},今年{age}岁了'

name = '张三'
age = 19
print('我叫%s,今年%i岁了' % (name,age))
print('我叫{0},今年{1}岁了'.format(name,age))
print(f'我叫{name},今年{age}岁了')

在这里插入图片描述

# 另外其他的用法
print('%10d' % 99)  # 10d代表的是字符串的宽度
print('%.3f' % 3.1415926)  # .3f代表保留三位小数
print('%10.3f' % 3.1415926) # 10.3f 同时表示宽度和经度
print('{:.3}'.format(3.1415926))  # 0代表第一个占位符可以省略   .3代表一共保留三位数   3.14
print('{0:.3f}'.format(3.1415926))  # .3f代表的是保留三位小数                 3.142
print('{:10.3f}'.format(3.1415926))  # 10代表宽度   .3f代表保留三位小数

在这里插入图片描述

字符串的编码转换

为什么需要编码转换
在这里插入图片描述

# 字符串的编码与解码
s = '千山鸟飞绝万径人踪灭'
# 编码
print(s.encode(encoding='GBK'))  #GBK简体中文 一个中文占两个字节   b'\xc7\xa7\xc9\xbd\xc4\xf1\xb7\xc9\xbe\xf8\xcd\xf2\xbe\xb6\xc8\xcb\xd7\xd9\xc3\xf0'
print(s.encode(encoding='UTF-8'))#UTF-8简体中文 一个中文占三个字节 b'\xe5\x8d\x83\xe5\xb1\xb1\xe9\xb8\x9f\xe9\xa3\x9e\xe7\xbb\x9d\xe4\xb8\x87\xe5\xbe\x84\xe4\xba\xba\xe8\xb8\xaa\xe7\x81\xad'
# 解码
byte = s.encode(encoding='GBK')
print(type(byte))  # <class 'bytes'>
print(byte.decode(encoding='GBK'))
byte = s.encode(encoding='UTF-8')
print(byte.decode(encoding='UTF-8'))   # 如果解码是的编码格式不对则会抛出异常

总结

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Liu_Shihao

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

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

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

打赏作者

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

抵扣说明:

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

余额充值