Python教程17-再说循环.pdfVIP

  • 1
  • 0
  • 约4.18千字
  • 约 8页
  • 2021-01-27 发布于山东
  • 举报
再说循环~列表和循环的高级操作 在前面的课程中,我们已经学习了循环和函数的基本操作,这节内容主要针对循 环和函数在项目使用过程中的一些更加有使用价值的操作进行分析和讲解 本节内容:  循环部分 o 列表构建器 o 列表动态构建器 o 循环操作序列对象 o 循环迭代遍历数据  函数部分 o 函数递归 o 参数使用函数 o 函数中返回函数 o 匿名函数 o 偏函数 1. 循环操作 1.1 列表构建器 常规情况下,我们定义列表的语法如下 lix = [列表元素列表] 如果在某些情况下,我们要定义一个1~100 的列表,是一件特别麻烦的事情, 手工编码就会变得非常的繁琐,此时,我们可以使用第一种方式来进行列表的构 建 lix = list(range(1, 101)) 执行结果:lix = [1, 2, 3, 4, 5, 6, ] 但是,此时如果我们想要的不是自然数,而是每个数字的平方呢? 我们可以这么做 lix = []; for x in range(1, 101): lix.push(x ** 2) 执行结果:lix = [1,4,9,16,25] 但是通过这样的方式循环迭代比较繁琐,可以通过列表构建器来直接实现 lix = [x * x for x in range(1, 101)] 执行结果:lix = [1,4,9,16,25] # 其实列表构建器中,就是一个简单的表达式操作 同样的,在列表构建器的表达式中,可以添加简单的条件处理 lix = [x * x for x in range(1, 101) if x % 2 == 0] 执行结果:lix = [4,16,36] 也可以在循环过程中,来使用多层循环嵌套,实现更加复杂的效果 lix = [x + y for x in abc for y in xyz] 执行结果:[ax, ay, az, bx, by, bz, cx, cy, cz] 1.2 列表动态构建器 但是我们通过前面的学习已经知道,这些数据都是加载到内存中的,如果列表中 的数据量比较大的情况下,内存消耗是比较严重的 在某些情况下,我们只需要使用列表中的一部分数据,后面的数据并不是特别关 心,如:通过列表来记录一个符合某种规则的序列,每次我们只是关心下一个数 据,并不关心后面的N 条数据,应该怎么做呢?比如我们需要一个奇数列表 # 常规构建器的做法 lix = [2*x + 1 for x in range(1, 101)] # 执行结果:[1,3,5,7,9,11,13,15,17] # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * # 常规构建器可以直接构建生成 # 但是存在问题,如果一次构建的数据量太大,会严重占用内存 # 我们在使用该列表的时候,有可能只是使用前10 项 # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * # 使用列表动态构建器 lix = (2 * x - 1 for x in range(1, 101)) # 执行结果:print (lix) -- generator object genexpr at 0x7f232e462048 next(lix) # 执行结果:1 next(lix) # 执行结果:3 next(lix) # 执行结果:5 next(lix) # 执行结果:7 # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * # 列表动态构建器 # 和构建器基本没有区别,创建的时候列表中是没有数据的 # 必须通过next()函数来获取列表中的下一条数据 # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1.3. 循环列表 常规循环列表的方式 lix = [远古巫灵泽拉斯, 机械先驱维克托, 惩戒之箭维鲁斯, 龙血武姬希瓦娜] for x in lix: print(x) 执行结果: 远古巫灵泽拉斯 机械先驱维克托 惩戒之箭维鲁斯 龙血武姬希瓦娜 如果此时,我想象其他语言一样,在循环过程中操

文档评论(0)

1亿VIP精品文档

相关文档