组队学习专用——chap 5

目录

一、个人链接主页

https://hydro.ac/d/datawhale_p2s/user/63162

二、遍历

1、单个遍历

①. 使用 range 遍历一个列表

②. 使用切片遍历一个列表

2、并行遍历多个列表

①. 使用 zip 函数构建字典

3、同时遍历下标和元素值

三、循环

1.for循环

2.while循环

3. break

4. continue

5.速度对比

四、剪枝

1.判断是否为质数

①基本方法 isPrime:

②优化方法 fasterIsPrime:

2.在机器学习中的应用


一、个人链接主页

登录 - HydroOJ

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 语句用于立即终止当前的循环(forwhile),并跳出循环体。

②适用场景:当满足特定条件时,需要提前退出循环。

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 
  • 逻辑简单易懂,逐个检查从 2n-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正则化,自动将一些特征的系数压缩为零,从而实现特征选择。

决策树剪枝:在构建决策树时,通过限制树的深度或去除一些不必要的分支来简化模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值