Python中替代for循环的几种方法
1.for循环
之前博客有发过for循环的本质,但不究其本质,for循环我们可以总结为是对序列进行遍历操作,生成另一个序列的过程。
for i in iterable:
do something
可以说写for循环结构已经成为当我们面对相关问题时的习惯,这也是在代码中十分常见的结构,但理性地去思考,for循环相比于扁平结构是否还有一些不足?
1.更多的代码行数
2.较差的代码可读性
3.运行性能较差
2.可以替代for循环的方法
(1)列表生成器
def f(x):
return x**2
list1=[f(x) for x in range(1,11)]
list2=[x**2 for x in range(1,11)]
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
(2)生成器
节省内存,用的时候拿出
a=(i for i in range(10)) #生成器对象
#print(next(a)) 0
for i in a:
print(i) #0 1 2 3 4 5 6 7 8 9
def foo():
print('First')
yield 1
print('Second')
yield 2
print('Third')
yield 3
print(foo) #<function foo at 0x00000208561BA940>
print(foo()) # <generator object foo at 0x00000208561BFC10>
a = foo()
for i in a:
print(i) # First 1 Second 2 Third 3
(3)内置函数
filter(func,*iterable)
#将可迭代对象值传到函数执行,返回符合条件的值生成迭代器(过滤)
map(func,*iterable)
#将可迭代对象每一个值传到函数执行,并且返回生成迭代器(处理)
reduce(func,sequence)
#要引入 from functools import reduce
#将包含两个参数的函数累计应用于序列的项,从左到右,直到序列缩减为一个值(结果为一个值)