目录
https://hydro.ac/d/datawhale_p2s/user/63162
一、个人链接主页
https://hydro.ac/d/datawhale_p2s/user/63162
二、遍历
1、单个遍历
①. 使用 range
遍历一个列表
假如需要修改列表元素值,可以借助 range
函数,比如把 L
里元素值加倍(double):
L = ['a', 'b', 'c', 'd']
for i in range(len(L)):
L[i] *= 2
当然,还有更好的方式,使用列表解析可以这么写:
L = [i * 2 for i in L]
②. 使用切片遍历一个列表
使用切片可以选择性地遍历列表:
L = ['a', 'b', 'c', 'd']
for item in L[::2]:
print(item, end='')
2、并行遍历多个列表
①. 使用 zip
函数构建字典
keys = ['a', 'b', 'g', 'p']
vals = ['apple', 'banana', 'grape', 'peach']
可以使用 dict
函数更方便地构建字典:
result = dict(zip(keys, vals))
3、同时遍历下标和元素值
enumerate
函数可以在 for
循环中同时返回下标和元素值:
L = ['a', 'b', 'c', 'd']
for index, item in enumerate(L):
print(index, item)
三、循环
1.for循环
①定义:for
循环用于遍历可迭代对象(如列表、元组、字符串等)中的每个元素。
②语法:
for variable in iterable:
# code block
③适用场景: 自动处理迭代次数,适合已知次数的循环;在每次迭代中,变量 variable
会依次取到 iterable
中的每个元素。
2.while循环
①定义:while
循环根据条件表达式的真假来决定是否继续执行循环体。
②语法:
while condition:
# code block
③适用场景 :适合在不知道循环次数的情况下使用,循环会持续进行直到条件不再满足;在每次迭代中,需手动更新控制条件,避免出现无限循环。
3. break
①定义:break
语句用于立即终止当前的循环(for
或 while
),并跳出循环体。
②适用场景:当满足特定条件时,需要提前退出循环。
4. continue
①定义:continue
语句用于跳过当前循环的剩余部分,并立即开始下一次迭代。
②使用场景:当某个条件满足时,需要跳过当前迭代,继续下一次循环。
5.速度对比
众所周知,Python 不是一种执行效率较高的语言。此外在任何语言中,循环都是一种非常消耗时间的操作。假如任意一种简单的单步操作耗费的时间为 1 个单位,将此操作重复执行上万次,最终耗费的时间也将增长上万倍。
例如以下这段代码来说明:
其中的差距主要在于两者的机制不同。
在每次循环中,while
实际上比 for
多执行了两步操作:边界检查和变量 i
的自增。即每进行一次循环,while 都会做一次边界检查 (while i < n
)和自增计算(i +=1
)。这两步操作都是显式的纯 Python 代码。
for
循环不需要执行边界检查和自增操作,没有增加显式的 Python 代码(纯 Python 代码效率低于底层的 C 代码)。当循环的次数足够多,就出现了明显的效率差距。
四、剪枝
剪枝一种可以提高搜索算法时间和空间效率的技巧,经过剪枝和其他优化策略优化过的算法在执行效率上远超一般未经剪枝的算法。甚至有些暴力搜索过不了时限的算法,也可以通过各种剪枝+优化大大缩短算法运行时间,成功通过时效限制。由此可见剪枝对于搜索算法的重要性。因此,剪枝对于学习算法和在工作中与算法打交道的人来说都是一类不得不学的知识点。
1.判断是否为质数
①基本方法 isPrime
:
# 不是最快的写法,但最容易理解
def isPrime(n):
if n < 2:
return False
for factor in range(2,n):
if n % factor == 0:
return False
return True
for n in range(100):
if isPrime(n):
print(n, end=" ")
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
- 逻辑简单易懂,逐个检查从
2
到n-1
是否能整除n
。 - 适用于小范围的质数检测,但效率较低,时间复杂度为 O(n)。
② 优化方法 fasterIsPrime
:
# 快了一点
def fasterIsPrime(n):
if n < 2:
return False
if n == 2:
return True
if n % 2 == 0:
return False
maxFactor = round(n**0.5)
for factor in range(3, maxFactor+1, 2):
if n % factor == 0:
return False
return True
for n in range(100):
if fasterIsPrime(n):
print(n, end=" ")
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
- 通过剪枝优化算法:
- 排除小于
2
的数。 - 特别处理
2
(唯一的偶数质数)。 - 仅检查奇数因子,并只到平方根(sqrt(n)),降低了时间复杂度到 O(sqrt(n))。
- 排除小于
2.在机器学习中的应用
在机器学习中,特征选择也是一种“剪枝”策略。我们在训练模型时,通过去除冗余或无关的特征,来提高模型的效率和性能。例如,使用方法如:
Lasso回归:通过引入L1正则化,自动将一些特征的系数压缩为零,从而实现特征选择。
决策树剪枝:在构建决策树时,通过限制树的深度或去除一些不必要的分支来简化模型。