一、引言
Python作为一门流行的编程语言,其前景一直是编程界的热门话题。Python简洁的语法、强大的标准库和丰富的第三方库使其在众多领域都有广泛的应用,从网站开发、数据分析、人工智能到科学计算等。随着数据科学和人工智能的兴起,Python的需求持续增长,成为了许多初学者和转行人士的首选语言。
根据业界调查,Python的流行度持续位于顶尖位置。技术发展的趋势表明,Python在未来仍然是一个值得投资学习的语言,不仅因为其在当前的技术市场中的需求,还因为它在教育、科研和自动化等领域的扩展性。
二、第六章
1.字符串常用操作
# Author : zzd
# Date : 2016/3/4 13:45
# 查询操作
"""
index() 查找字符第一次出现的位置,不存在抛出异常ValueError
rindex() 查找字符最后一次出现的位置,不存在抛出异常ValueError
find() 查找字符第一次出现的位置,不存在返回-1
rfind() 查找字符最后一次出现的位置,不存在返回-1
"""
def find_str():
s = 'password'
i = s.index('s')
print('index查找字符第一次出现的位置,不存在抛出ValueError',i)
i = s.find('s')
print('index查找字符第一次出现的位置,不存在返回-1',i)
i = s.find('z')
print('index查找字符第一次出现的位置,不存在返回-1', i)
j = s.rindex('s')
print('index查找字符最后一次出现的位置,不存在抛出ValueError', j)
j = s.rfind('s')
print('index查找字符最后一次出现的位置,不存在返回-1', j)
j = s.rfind('z')
print('index查找字符最后一次出现的位置,不存在返回-1', j)
# 2. 字符串带小写转换
"""
upper() 把字符中的所有字符串都转成大写字母
lower() 把字符中的所有字符串都转成小写字母
swapcase() 把字符串中所有大写字母都转成小写字母,把所有小写字母转成大写字母
capitalize() 把第一个字符转成大写,其他转成小写
title() 把每个单词第一个字符转成大写,其余转成小写
"""
def trans_str():
s = 'hEllo wOrd'
print('原数据',s)
print('upper():',s.upper())
print('lower()',s.lower())
print('swapcase()',s.swapcase())
print('captitalize()',s.capitalize())
print('title()',s.title())
# 3.字符串对齐方式
def align_str():
s = 'hello word'
print('居中对齐:',s.center(20,'-'))
print('左对齐:',s.ljust(20,'_'))
print('右对齐:',s.rjust(20,'_'))
print('右对齐,只传一个参数,默认0填充',s.zfill(20))
# 4.字符串拆分
def split_str():
s1 = 'hello world python'
s2 = 'hello-world-python'
print('从左往右分'.center(100,'*'))
print('split默认按空格拆分',s1.split())
print('split,设置sep选择分隔符,设置maxsplit设置最大分割次数', s2.split(sep='-',maxsplit=1))
print('\n')
print('从右往左分'.center(100, '*'))
print('rsplit默认按空格拆分',s1.rsplit())
print('rsplit,设置sep选择分隔符,设置maxsplit设置最大分割次数', s2.rsplit(sep='-', maxsplit=1))
"""从左往右和从右往左分的最主要的区别在与设置maxsplit后,会得到不同的结果"""
# 5. 字符串判断操作
"""
isidentifier() 是不是合法的标识符
isspace() 是否全部由空白字符串组成(回车、换行、水平制表符)
isalpha() 是否全部由字母组成
isdecimal() 是否全部由二进制数字组成
isnumeric() 是否全部由数字组成
isalnum() 是否全部由字母和数字组成
"""
def judge_str():
s1 = 'hello_123'
s2 = s1.join('@')
s3 = ' \t'
s4 = 'abcd'
s5 = '1234'
s6 = '123四'
print('合法标识符'.center(70,'*'))
print(s1,'是不是由合法标识符组成',s1.isidentifier())
print(s1,'是不是由合法标识符组成',s2.isidentifier())
print('\n','空白字符串'.center(70, '*'))
print(s1, '是不是空白字符串组成', s1.isspace())
print(s3,'是不是空白字符串组成',s3.isspace())
print('\n', '字母'.center(70, '*'))
print(s1,'是不是全部由字母组成',s1.isalpha())
print(s4, '是不是全部由字母组成', s4.isalpha())
print('\n', '十进制数字'.center(70, '*'))
print(s5,'是不是由十进制数字组成',s5.isdecimal())
print(s6, '是不是由十进制数字组成', s6.isdecimal())
print('\n', '数字'.center(70, '*'))
print(s5, '是不是由数字组成', s5.isnumeric())
print(s6, '是不是由数字组成', s6.isnumeric())
print('\n', '字母和数字'.center(70, '*'))
print(s1, '是不是全由字母和数字组成', s1.isalnum())
print(s4,'是不是全由字母和数字组成',s4.isalnum())
# 6.字符串替换和 合并
def replace_join_str():
s1 = 'hello java java'
lst = ['hello','java','python']
tup = ('hello','java','python')
print('replace替换',s1.replace('java','python'))
print('replace只替换1个目标',s1.replace('java','python',1))
print('join合并','*'.join(s1))
print('列表合并','*'.join(lst))
print('元组合并','*'.join(tup))
if __name__ == '__main__':
replace_join_str()
2.字符串比较操作
# Author : zzd
# Date : 2016/3/4 15:31
# 字符比较操作
"""
字符串的比较操作:
运算符:> >= < <= == !=
比较规则:
首先是比较两个字符串中第一个字符,如果相等则继续比较下一个字符,
依次比较下去,直到两个字符串中的字符不相等时,其比较结果就说两个字符串的比较结果
两个字符串中的所有后续字符将不再被比较
比较原理:
两个字符进行比较时,比较是其ordinal value(原始值),调用内置函数ord可以 得到指定字符的Ordinal value。
与内置函数ord对应的内置函数是chr,调用内置函数chr时指定ordinal value可以得到其对应的字符
"""
def compare_str():
print('python' > 'java')
print('p',ord('p'))
print('j',ord('j'))
print('112',chr(112))
print('106',chr(106))
## == 比较的值
## is 比较的id
if __name__ == '__main__':
compare_str()
3.字符串切片操作
# Author : zzd
# Date : 2022/3/4 16:05
# 字符串切片操作
"""
字符串是不可变类型
不具备增、删、改等操作
切片操作将产生新的对象
"""
s = 'abcdefg'
print('指定切片区间',s[0:2])
print('不指定起始:',s[:2])
print('不指定结束:',s[2:])
print('指定区间、指定步长',s[0:3:2])
4.字符串编码解码
# Author : zzd
# Date : 2022/3/4 16:49
# 字符串的编码解码
"""
为什么需要字符串的编码转换:
计算机之间的传输是通过byte字节,在计算机展示的时候是字符
编码和解码的方式:
编码:将字符串转换为二进制数据bytes
解码:将bytes类型的数据转换成字符串类型
"""
s = '大河向东流'
# 编码
print(s.encode(encoding='GBK')) # 一个中文字符,两个字节
print(s.encode(encoding='UTF-8')) # 一个中文字符,三个字节
# 解码
byte = b'\xb4\xf3\xba\xd3\xcf\xf2\xb6\xab\xc1\xf7'
print(byte.decode(encoding='GBK'))
byte = b'\xe5\xa4\xa7\xe6\xb2\xb3\xe5\x90\x91\xe4\xb8\x9c\xe6\xb5\x81'
print(byte.decode(encoding='UTF-8'))
5.字符串驻留机制
# Author : zzd
# Date : 2016/3/4 10:41
# 字符串的驻留机制
"""
字符串:
在Python中字符串是基本数据类型,是一个不可变的字符序列
什么叫字符串驻留机制?
仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中,
Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同的字符串时,
不会开辟新的空间,而是把该字符串 的地址赋给新创建的变量
"""
a = 'python'
b = "python"
c = """python"""
print('----------相同字符串,相同地址------------')
print(a,id(a))
print(b,id(b))
print(c,id(c))
print(a is b , b is c , c is a)
"""
驻留机制的几种情况:
字符串长度为0或1时
符合标识符的字符串
字符串只在编译时进行驻留,而非运行时
[-5,256]之间的整数数字
sys中intern方法强制2个字符串指向同一对象
pycharm对字符串进行了优化处理
"""
"""
Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> s1 = 'abc'
>>> s2 = 'abc'
>>> s1 is s2
True
>>> s1 = 'abc%'
>>> s2 = 'abc%'
>>> s1 is s2
False
>>> s1 == s2
True
>>>
"""
# 字符串驻留的优缺点
"""
字符串驻留的优缺点:
当需要值相同的字符串时,可以直接从字符串池中拿来使用,
避免频繁的创建和销毁,提升效率和节约内存,因此拼接字符串和修改字符串是比较影响性能的
在需要进行字符串拼接的时候建议使用str类型的join方法,而非+,
因为join()方法是先计算出所有字符中的长度,然后拷贝,只new一次对象,效率比+更高
"""
# >>> c = ''.join(['ab','c'])
# >>> c
# 'abc'
# >>> c = 'a'.join(['b','c'])
# >>> c
# 'bac'
# >>>
6.格式化字符串
# Author : zzd
# Date : 2022/3/4 16:21
# 格式化字符串
"""
格式化字符串的两种方式
%作为占位符: '我的名字叫:%s,今年%d岁了' % (name,age)
字符串:%s
整数:%l 或 %d
浮点数:%f
{}作为占位符: '我的名字叫:{0},今年{1}岁了,我真的叫{0} format(name,age)
"""
name = 'zxy'
age = 18
print('我叫%s,我今年%d岁了' % (name,age))
print('我叫{0},我今年{1}岁了,我真的叫{0}'.format(name,age))
# 长度为10,保留小数点后三位
print('%10.3f' % 3.1415926)
print('{}'.format(3.1415926)) # 只有一个元素,不指定位置也可
print('{0:.3}'.format(3.1415926)) # 总共保留三位数
print('{0:.3f}'.format(3.1415926)) # 保留三位小数
print('{0:10.3f}'.format(3.1415926)) # 设置宽度和精度,一共十位,保留小数点后三位