Python学习笔记(三)程序控制之循环结构

本文详细介绍了Python中的循环结构,包括for循环和while循环的使用,以及break和continue语句的控制流程。强调了在for循环和while循环中何时使用break和continue,以及循环结构优化的原则,如减少不必要的计算和提升运行效率。最后,提到了局部变量在循环中的作用以提高程序性能。

3.2  循环结构

3.2.1  for循环与while循环

for循环

for循环一般用于循环次数已知的情况,尤其适用于枚举或遍历序列或迭代对象中元素的集合。

语法格式:

for 取值 in 序列或迭代对象:

  循环体

[else:

    else子句代码块]

其中,方括号中的else子句可以略去。

示例:

使用for循环计算1+2+3+···+100的结果,代码如下:

>>>s = 0

>>>for i in range(1,101):

      s += i

else:

     print(s)

5050 

while 循环 

while循环一般用于循环次数难以提前确定的情况,也可以用于循环次数确定的情况。

语法格式:

while 条件表达式:

  循环体

[else:

  else子句代码块]

 其中,方括号中的else子句可以略去。

示例:

用while循环计算1+2+3+···+100的结果,代码如下:

>>>s = i =0

>>>while i <=100:

     s += i

     i ++

else:

      print(s)

5050

 【注】在for循环和while循环都能应用的情况下,一般优先考虑使用for循环。

3.2.2  break 和 continue 语句

break 语句

break语句在while循环和for循环中都可以使用,一般放在if选择结构中,一旦break语句被执行,将使得整个循环提前结束

下面的代码用来计算小于100的最大素数,注意break语句和else子句的用法。

>>> for n in range(100, 1, -1):

    for i in range(2, n):

  if n%i == 0:

  break                                           #结束内循环

    else:

  print(n)

  break                                           #结束外循环  

97

删除上面代码中最后一个break语句,则可以用来输出100以内的所有素数。

>>> for n in range(100, 1, -1):

    for i in range(2, n):

  if n%i == 0:

      break

    else:

  print(n, end=' ')

 

97 89 83 79 73 71 67 61 59 53 47 43 41 37 31 29 23 19 17 13 11 7 5 3 2

 

continue 语句 

continue语句的作用是终止当前循环,并忽略continue之后的语句,然后回到循环的顶端,提前进入下一次循环

示例:

 

>>> for i in range(10):

    if i%2==0:

    continue

    print(i, end=' ')

 

1 3 5 7 9

【注意】过多的break 和 continue 语句会降低程序的可读性。除非break 或 continue 语句让代码更简单或更清晰,否则不要轻易使用。

3.2.3  循环结构的优化

为了优化程序以获得更高的效率和运行速度,在编写循环语句时,应尽量减少循环内部不必要的计算,将与循环变量无关的代码尽可能地提取到循环之外。对于使用多重循环嵌套的情况,应尽量减少内层循环中不必要的计算,尽可能地向外提。

示例:

优化前的代码:

digits = (1, 2, 3, 4)

for i in range(1000):

    result = []

    for i in digits:

        for j in digits:

            for k in digits:

                result.append(i*100+j*10+k)

 

优化后的代码:

for i in range(1000):

    result = []

    for i in digits:

        i = i*100

        for j in digits:

            j = j*10

            for k in digits:

                result.append(i+j+k)

 另外,在循环中应尽量引用局部变量,因为局部变量的查询和访问速度比全局变量略块,在使用模块中的方法时,可以通过将其转换为局部变量来提高运行速度。

例如:

import time

import math

 

start = time.time() #获取当前时间

for i in xrange(10000000):

    math.sin(i)

print('Time Used:', time.time()-start) #输出所用时间

 

loc_sin = math.sin

start = time.time()

for i in xrange(10000000):

    loc_sin(i)

print('Time Used:', time.time()-start)

PS:

本篇主要参考董付国老师的《Python可以这样学》一书,这是一本不错的Python入门书籍,有兴趣的可以买本看看,当然,也可以持续关注我的博客,我会一直更新相关内容的。

 

内容概要:本文档详细介绍了一个使用MATLAB实现的基于DLinear+PatchTST多变量时间序列预测模型的项目实例。项目结合了深度学习模型(DLinear)和Transformer架构(PatchTST),旨在克服传统时间序列预测模型的局限,提升预测精度并增强对高维、非线性和长短期依赖关系的处理能力。该模型能够高效地处理大规模复杂时间序列数据,在多个应用领域展现出了巨大的潜力。文档详尽描述了项目背景、目标、挑战及其解决方案,并给出了从数据预处理到模型训练与优化的具体实现步骤和相应MATLAB代码,最后展示了通过GUI界面实现的可视化与用户互动功能。适合人群:从事时间序列预测的相关研究人员、开发者和有一定编程基础并对深度学习和Transformers感兴趣的从业者,尤其适合那些需要理解和应用深度学习方法处理大规模时间序列数据的专业人士。使用场景及目标:该项目主要针对金融市场预测、气候与环境预测、工业生产优化、医疗健康监测、交通流量预测等多个领域的多变量时间序列数据处理。目的是通过结合DLinear与PatchTST两个模型的优点,克服现有模型在处理多维非线性复杂数据方面的缺点,提供更精准可靠的预测。同时,通过增强模型可解释性以提高用户对其预测过程的理解程度,并确保系统能够应对实时高并发预测的需求。其他说明:文档强调了在整个项目周期内的各项注意事项,如保证数据质量与清洁、正确选择并优化模型、注重系统容错性和高可用性的设计,以及保护敏感数据的安全性和隐私。此外,还提到了未来改进的方向,例如增强模型自适应能力和引入先进的技术和理念,包括但不限于无监督学习、图神经网络、深度强化学习和大规模分布式训练。最后,提供了完整的程序设计思路及具体代码示例,以便使用者能更快地上手实践这个项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值