今日目标:
递归
字符串对象
切片
常见排序和查找
偏函数:
python中存在一种函数的特殊使用,称为偏函数
如果在调用某个函数时,恰好某一个或者,某一些参数都是一个固定值(正好不是默认值),
为了方便调用,我们可以通过特殊手段修改默认值
from functools import partial
新的函数 = partial(原函数名称, 参数=新值)
递归(recursion):
递归就是函数调用函数本身
求 1~n的和:
注意:递归虽然非常好用,可以将一些复杂的问题,极度简化,使得可以通过递归解决一些复杂问题,
但是递归是会重复压栈调用相同函数,所以栈内存会被大量占据,无法释放,
容易出现:“栈溢出错误”(StackOverFlow)
斐波那契数列:
第三个元素,是前两个元素之和
0 1
1 1
1 2
求第n个项的元素是多少?
案例:斐波那契数列的实现
思考题:
1、青蛙跳楼梯
2、不死兔子:
一对刚刚出生的兔子,四个月之后,会称为成年的兔子,成年兔子每月会生一对小兔子
等N月时,共有多少对兔子
字符串对象:
字符串是基本数据类型,讲解了几种常见的创建方式
"字符串"
'字符串'
"""
字符串
"""
'''
字符串
'''
str() 创建或者转换其他类型为字符串
len(字符串) 获取字符串的长度
字符串是一个有序的序列(sequence),也是一个可迭代对象,也有下标
字符串[下标] # 某一个位置的字符
通过while、for循环进行遍历
字符常量:字符串本质是一种常量
全局函数:
enumerate(可迭代对象)
python是一门面向对象的编程语言,在面向对象的编程语言看来:
万物皆对象
字符串对象的常见方法和属性:
['capitalize', 'casefold', 'center', 'count', 'encode', 'endswith',
'expandtabs', 'find', 'format', 'format_map', 'index',
'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier',
'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper',
'join', 'ljust', 'lower', 'lstrip', 'maketrans',
'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind',
'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split',
'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate',
'upper', 'zfill']
|-- capitalize # 首字母大小
|-- center # 文本居中对齐
|-- ljust # 文本左对齐
|-- rjust # 文本右对齐
|-- count()
|-- endswith()
|-- startswith()
|-- format()
|-- find()
|-- index()
|-- rindex()
|-- rfind()
|-- lstrip()
|-- rstrip()
|-- rstrip()
|-- upper()
|-- lower()
|-- join()
|-- split()
|-- maketrans()
|-- translate()
|-- encode() # 编码转换,注意编码!!!!
字节类型中的转换函数
|-- decode()
切片操作:
python提供的用来切割和分割有序序列的一种技术
list、tuple、字符串
切片操作是基于下标进行切割
对象[num1:] # 返回num1到结束的值
对象[num1:num2] # 返回[num1, num2)的所有值
对象[num1:num2:step] # step是步长,步长为负数,表示从右向左切割
注意:python是支持付索引操作的!!!!
课堂案例练习:
输入字符串,判断该字符串是否是回文字符串
排序:
为数据排序,目的让数据有序,有序的数据可以使用各种查找算法,实现快速查找
冒泡排序
选择排序
插入排序
大O表示法
时间复杂度:O(1) O(logN) O(n) O(nlogN) O(n^2)
空间复杂度:
算法稳定度:
冒泡排序:
[1, 3, 2, 10, -8, 9, -30, 7] n 最多n - 1
[1, 2, 3, -8, 9, -30, 7, 10] # 第1个最大值
[1, 2, -8, 3,-30, 7, 9, 10] # 第2个最大值
[1, -8, 2, -30, 3, 7, 9, 10] # 第3个最大值
[-8, 1, -30, 2, 3, 7, 9, 10] # 第4个最大值
[-8, -30, 1, 2, 3, 7, 9, 10] # 第5个最大值
[-30, -8, 1, 2, 3, 7, 9, 10] # 第6个最大值
两两比较,找到最大值!!!
递归: