Python笔记:第三部分 语句与语法 第十四章 循环、迭代与推导

文章目录

  • 循环
    • 计数器循环:Range
    • 并行遍历 :zip 和 map
      • zip函数
      • map函数
    • 同是给出偏移量和元素:enumerate函数
  • 迭代
      • 迭代器
    • 手动迭代
      • iter方法
      • next方法
    • Python列表推导式
    • filter方法

循环

通常for循环比while循环更容易写,且执行的更快,作为一条通用法则,你应该克制在Python中使用计数方式的诱惑——Python提供的迭代工具,能帮助我们把像C这样低级语言中循环集合体中的工作自动化。

  • 内置函数range返回一系列连续增加的整数
  • 内置函数zip返回一些列并行元素的元组,可用于在for内中遍历多个序列
  • 内置函数enumerate同时生成可迭代对象中元素的值和索引,因而不必再手动计数

计数器循环:Range

Python3.X中,range是一个会按需产生元素的可迭代对象,我们需要将range放在list调用,才能一次性显示它的所有内容。
range(start, stop[, step])

  • start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5); stop: 计数到
  • stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
  • step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

并行遍历 :zip 和 map

zip函数

  • 内置zip函数允许我们使用for循环并行访问多个序列——在同一个循环且时间上不重叠
  • 语法: zip([iterable, ...])
  • 参数说明:iterabl—— 一个或多个迭代器
  • 返回值: 返回元组列表
  • zip的输入参数是一个或多个序列,而他的返回值是将这些序列并排元素(最短)配对得到的元祖列表
  • zip的结果必须将其包含在一个list调用才能一次性显示所有结果

map函数

  • map() 会根据提供的函数对指定序列做映射
  • 语法:map(function, iterable, ...)
  • 参数说明:function – 函数 iterable – 一个或多个序列
  • 第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。(map通常运行的比for循环更快

同是给出偏移量和元素:enumerate函数

  • 用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
  • 语法:enumerate(sequence, [start=0])
  • 参数说明:sequence—一个序列、迭代器或其他支持迭代对象。 start —下标起始位置。
  • 返回值:enumerate(枚举) 对象,即一个生成器对象;这种对象支持迭代协议,并且在每次迭代中返回一个(index, value)元祖
>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))       # 小标从 1 开始
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

迭代

  • “可迭代对象”是Python语言中一个比较新的概念。本质上,这就是序列观念的一种通用化;如果对象是实际保存的序列或可以在迭代工具上下文(列入for循环)一次产生一个结果的对象,那么就可以被看作是可迭代的。
  • 可迭代对象包括实际序列,以及能按照需求计算的虚拟序列

迭代器

  • 迭代是Python最强大的功能之一,是访问集合元素的一种方式。
  • 迭代器是一个可以记住遍历的位置的对象。
  • 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
  • 迭代器有两个基本的方法:iter() 和 next()。

手动迭代

iter方法

  • iter() 函数用来生成迭代器。
  • 语法:iter(object[, sentinel])
  • 参数说明:object – 支持迭代的集合对象。sentinel – 如果传递了第二个参数,则参数 object 必须是一个可调用的对象(如,函数),此时,iter 创建了一个迭代器对象,每次调用这个迭代器对象的__next__()方法时,都会调用 object。
  • 返回值:返回文件下一行。

next方法

  • Python 3 中的 File 对象不支持 next() 方法。
  • Python 3 的内置函数 next() 通过迭代器调用 next() 方法返回下一项。 在循环中,next()方法会在每次循环中调用,该方法返回文件的下一行,如果到达结尾(EOF),则触发 StopIteration
  • 语法:next(iterator[,default])
  • 返回值:返回文件下一行。

Python列表推导式

  • 基本表达式[表达式 for 变量 in 列表]
# 想得到1-10的平方组成的list
list_1_10 = [x**2 for x in range(1,11)]
print(list_1_10)
# 想得到1-10中为偶数的平方组成的list
example = [i**2 for i in range(1,11) if i%2 == 0 ]
print(example)
# 想得到多重嵌套中的数是2的倍数的平方组成的list
example2 = [[1,2,3],[4,5,6],[7,8,9],[10]]
example3 = [j**2 for i in example2 for j in i if j%2 == 0]
print(example3)
  • 列表推导所需要的代码更少,而写运行速度会大大提升
  • 列表推导并不完全与for循环语句版本相同,因为他产生一个新的列表对象。

filter方法

  • filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用list()来转换。
  • 该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
  • 语法:filter(function, iterable)
  • 参数说明:function – 判断函数 iterable – 可迭代对象
# 过滤出列表中的所有奇数: 
def is_odd(n):
    return n % 2 == 1
tmplist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
newlist = list(tmplist)
print(newlist)
[1, 3, 5, 7, 9]

你可能感兴趣的:(Python,笔记)