Python之循环结构【包括列表、for语句、range()函数、while语句、循环嵌套、break、continue、算法优化等】

以太以北 2021-10-27 03:31:19
Python 循环 结构 列表 包括

python循环结构的学习,主要包括列表、for语句、range()函数、while语句、循环嵌套、break、continue、算法优化等。


1、列表

列表可以包含多个/多种数据元素,是一个有序的容器。
一个列表中的元素可以是不同类型的,其下标索引从0开始,亦可使用负数(从后向前)进行索引。
列表的常见操作:赋值、删除(remove、pop、del)、插入(insert)、添加(append)等。
用list函数可以将集合或字符串类型的数据转换成列表类型的数据。

请运行下列程序,查看结果并理解列表的作用(如有疑问欢迎留言)

a=[1,3,5,7,1,"盐中","苹果","123456",True,3<2]
print(a)
a[1]=7
print(a)
a.remove(1)
print(a)
a.remove(1)
print(a)
del a[5]
print(a)
a.pop(5)
print(a)
a.insert(3,20211020)
print(a)
a.append("China")
print(a)
for i in a:
print(i)
for i in range(-1,-(len(a)+1),-1):
print(a[i])

2、计数循环(包括range()函数使用方法)

循环次数一定时,常使用计数循环(for语句)来实现。
for 语句的基本格式为:

for 循环变量 in 序列 :
      \space\space\space\space\space      语句或语句组

缩进的语句或语句组称为循环体。Python规定循环体必须相对关键词 for 有缩进。in 后面也可以是range()函数。

range(a,b,c)函数:
\blacktriangleright 可以生成一个 [a,b) 的数字序列,c表示步长值(序列的公差);
\blacktriangleright 若只有两个参数a、b,则表示生成范围 [a,b) 的数字序列;
\blacktriangleright 若只有一个参数 a,则表示生成范围 [0,a) 的数字序列。
请运行下列程序,查看结果并理解 range 的作用

for i in range(10):
print(i)
for i in range(10,20):
print(i)
for i in range(10,20,3):
print(i)
for i in range(20,10,-2):
print(i)

range(函数应用):
例 : 求a、b的最大公约数参考程序如下:
【参考程序1】

a=int(input())
b=int(input())
gcd=1
for i in range(1,a+1):
if a%i==0 and b%i==0:
gcd=i
print(gcd)

【参考程序2】

a=int(input())
b=int(input())
gcd=1
for i in range(a,0,-1):
if a%i==0 and b%i==0:
gcd=i
break
print(gcd)

3、条件循环

条件循环(while语句)一般用于循环次数未知的情况。
while语句的基本格式为:

while 条件 :
      \space\space\space\space\space      语句或语句组

当表达式成立时,执行循环体。Python允许表达式为数字,如果该数字为 “0” 则表示表达式为假(即不成立),为非 0 数字则表示为真(即成立)。
例:用辗转相除法求最大公约数,参考程序如下:

a=int(input())
b=int(input())
r=a%b
while r:
a=b
b=r
r=a%b
print(a)

4、循环嵌套

一个循环结构的内部也可以包含另一个循环结构,这样的结构称为循环嵌套(也称为多重循环)。常用的循环嵌套是二重循环,分外层循环(外循环)与内层循环(内循环)。内循环是外循环的循环体,外层循环每执行一次,内层循环则执行一次完整的循环。
以计数循环for语句为例的二重循环格式如下:

for 循环变量1 in 序列1:            \space\space\space\space\space\space\space\space\space\space            #外循环
      \space\space\space\space\space      for 循环变量2 in 序列2:         \space\space\space\space\space\space\space        #内循环,注意缩进
           \space\space\space\space\space\space\space\space\space\space           语句或语句组                  \space\space\space\space\space\space\space\space\space\space\space\space\space\space\space\space                 #循环体,注意缩进

例:“百钱买百鸡”
我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?
参考程序如下:

for i in range(1,101): #i表示公鸡的数量
for j in range(1,101): #j表示母鸡的数量
for k in range(1,101): #k表示小鸡的数量
if i+j+k==100 and i*5+j*3+k/3==100: #满足“百鸡、百钱”的条件
print(i,j,k)

5、break和continue语句(如何优化算法)

break语句用于终止某个循环,使程序跳到循环体以外的第一个可执行语句;continue语句用于终止本次循环,直接进入下一次循环,即跳过循环体内还未执行的语句,进入下一次循环的判定。

break语句使用示例:

#求最大公约数
a=int(input())
b=int(input())
gcd=1
for i in range(a,0,-1):
if a%i==0 and b%i==0:
gcd=i
break
print(gcd)

continue语句经常用于对程序进行优化,例如刚刚的“百钱买百鸡”的程序中不难发现,当 i+j>100 时就不再需要去进行k的取值与判定,即当公鸡母鸡的数量和超过100时直接跳过本次循环,进入下一次循环。

for i in range(1,101): #i表示公鸡的数量
for j in range(1,101): #j表示母鸡的数量
for k in range(1,101): #k表示小鸡的数量
if i+j+k==100 and i*5+j*3+k/3==100: #满足“百鸡、百钱”的条件
print(i,j,k)

可以改写如下

for i in range(1,101): #i表示公鸡的数量
for j in range(1,101): #j表示母鸡的数量
if i+j>100: #当公鸡母鸡的数量和超过100时直接跳过进入下一次循环
continue
for k in range(1,101): #k表示小鸡的数量
if i+j+k==100 and i*5+j*3+k/3==100: #满足“百鸡、百钱”的条件
print(i,j,k)

原本的循环体需要执行 10 0 3 100^3 1003 即一百万次,现在用continue立刻优化了一半变成了50万次,这种操作我们一般称为“可行性剪枝”,即发现某些情况不需要再往下做时用continue进行优化。当然就本题“百钱买百鸡”而言可以继续优化,例如公鸡的范围其实只可能在 [0,20],母鸡在 [0,33],小鸡可以根据公鸡母鸡的数量直接算出来,参考程序如下:

for i in range(21): #i表示公鸡的数量
for j in range(34): #j表示母鸡的数量
k=100-i-j #k表示小鸡的数量
if i*5+j*3+k/3==100: #满足“百钱”的条件
print(i,j,k)

优化循环的要点:
\blacktriangleright 1、减少循环层数
\blacktriangleright 2、缩小循环范围
\blacktriangleright 3、将次数少的作为外层循环,次数多的作为内层循环
\blacktriangleright 4、精简循环体

版权声明
本文为[以太以北]所创,转载请带上原文链接,感谢
https://blog.csdn.net/u014042772/article/details/120867536

  1. python求带我脱离苦海,哎_
  2. Python 数据分析里面轴的问题
  3. python初学者,请问使用openpyxl库读取文件后出现图片中的报错要怎么解决?
  4. 大学毕业论文写有关python
  5. 授人以鱼吧友友python编写程序自动计算个人总分平均分各科最高最低平均分
  6. python怎么将四行代码换成一行啊
  7. 用Python如何编写啊 真不会啊?
  8. 这个布尔变化怎么做啊(Python
  9. PYTHON求集合交集需要用户手动输入集合名
  10. Python运行哈姆雷特词频统计时出错(如图),是哪方面的问题?
  11. 【Python表白代码合集】”我还是很喜欢你,像风走了八千里,不问归期”!!
  12. python实现学生信息管理系统(含代码)
  13. wxpython中如何按键停止死循环?
  14. python 类的问题?不懂这种方法的作用?不是继承那是什么作用?
  15. Python 题目不会写 求帮助!
  16. Python,turtle制图,要求使用for,while编写
  17. Python题目不会 求帮助! 谢谢您!
  18. Python题目不会!求帮助!
  19. Python这个看不太懂,,大神们帮个忙
  20. 安装拓展库pandas失败怎么解决
  21. python将字符串转成特定列表格式
  22. Python做一个保护手机号编程
  23. 用Spyder运行Python爬虫时仅输出“runfile(xx), wdir=xx”
  24. 使用Python对一组数据进行分段拟合,如何处理断点处的左右倒数相等
  25. Python输出符合条件的文件的路径名
  26. Python中pandas怎么实现分组去重统计和求和
  27. python xpath 爬虫,请帮帮我吧!
  28. python 用泰勒公式近似计算sinx的值 求解代码中哪里出现了错误
  29. Python语法2
  30. python如何将输出的各行数字对齐
  31. 使用 Python 进行数据可视化之Matplotlib
  32. python新鲜题 老公们 救救孩子
  33. 如何用python解答 要如何着手
  34. 请问Python正则表达式如何在多个文本中匹配出关键字
  35. Python 三天打鱼两天晒网问题
  36. mac安装python3
  37. 請問python要怎麼印数字倒等腰三角形
  38. 【算法学习】807. 保持城市天际线(java / c / c++ / python / go / rust)
  39. 【算法学习】237. 删除链表中的节点(java / c / c++ / python / go)
  40. 【算法学习】1512. 好数对的数目(java / c / c++ / python / go / rust)
  41. 【算法学习】1672. 最富有客户的资产总量(java / c / c++ / python / go / rust)
  42. 【算法学习】771. 宝石与石头(java / c / c++ / python / go / rust)
  43. 【算法学习】02.03. 删除中间节点(java / c / c++ / python / go)
  44. 【算法学习】1769. 移动所有球到每个盒子所需的最小操作数(java / c / c++ / python / go / rust)
  45. 【算法学习】1486. 数组异或操作(java / c / c++ / python / go / rust)
  46. 【算法学习】剑指 Offer 64. 求1+2+…+n(java / c / c++ / python / go / rust)
  47. 【算法学习】LCP 44. 开幕式焰火(java / c / c++ / python / go / rust)
  48. 【算法学习】剑指 Offer 58 - II. 左旋转字符串(java / c / c++ / python / go / rust)
  49. python的学校疑问难题求解
  50. 大学python题 作业题 基础题
  51. Python字典的知识,输出的样例为,最高分:89
  52. python写入文件失败且程序提前中止
  53. 用Python写一个学生字典,帮帮忙
  54. Python,能不能帮帮忙,真的不会
  55. [python] yield 和 readline() 的使用问题
  56. python安装找不到问题救救孩子
  57. python中循环结构完成数字游戏
  58. 如何用python实现多列vlookup(excle操作)
  59. python语言deLong‘s test:通过统计学的角度来比较两个ROC曲线、检验两个ROC曲线的差异是否具有统计显著性
  60. 安装LPC55S69 MicroPython模块是遇到的CDC Interface驱动问题