文章目录
- 循环
-
- 计数器循环:Range
- 并行遍历 :zip 和 map
-
- 同是给出偏移量和元素:enumerate函数
- 迭代
-
-
- 手动迭代
-
- 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, '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列表推导式
list_1_10 = [x**2 for x in range(1,11)]
print(list_1_10)
example = [i**2 for i in range(1,11) if i%2 == 0 ]
print(example)
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]