将嵌套的 for 循环转换为Python中等效的映射
在本文中,让我们看看如何将嵌套的 for 循环转换为Python中的等效映射。
嵌套 for 循环的映射等效项与 for 循环执行相同的工作,但在一行中。等效的映射比嵌套的 for 循环更有效。可以间歇性地停止 for 循环,但不能在其间停止 map函数。
句法:
map(function, iterable).
这可以阐述为
map(lambda x : expression, iterable)
映射函数只是应用指定的函数 在给定的可迭代对象上 并返回修改后的迭代作为结果。
示例:创建嵌套循环
Python3
# create two sample lists lst1 and lst2 as shown
lst1 = [10, 20, 30]
lst2 = [3, 4, 5]
# this empty list stores the output
result = []
# Now, run a nested for loop
# add every element of the lst1 to all elements of lst2
# store the output in a separate list
for i in lst1:
for j in lst2:
result.append(i+j)
# print the result
print(result)
Python3
# create two sample lists lst1 and lst2 as shown
lst1 = [10, 20, 30]
lst2 = [3, 4, 5]
# this empty list stores the output
result = []
# now, apply nested map function on both the
# created lists append the final output to
# the "result" list
list(map(lambda a: result.extend(map(a, lst2)),
map(lambda a: lambda b: a+b, lst1)))
print(result)
输出:
[13, 14, 15, 23, 24, 25, 33, 34, 35]
现在,让我们看看这个嵌套 for 循环的映射等价物。
为此使用了三个 map 函数,两个嵌套到另一个中。第一个映射函数是父映射函数,它连接了内部两个映射函数的结果。我们必须将整个结果传递给 list()函数。如果我们选择忽略最外层的 list()函数,则输出将是一个地图对象。原因是地图对象不喜欢将可迭代对象的整个大小存储在其内存中。因此,要访问输出,我们需要明确指定此映射函数的输出格式为列表。
示例:将嵌套的 for 循环转换为等效的映射
Python3
# create two sample lists lst1 and lst2 as shown
lst1 = [10, 20, 30]
lst2 = [3, 4, 5]
# this empty list stores the output
result = []
# now, apply nested map function on both the
# created lists append the final output to
# the "result" list
list(map(lambda a: result.extend(map(a, lst2)),
map(lambda a: lambda b: a+b, lst1)))
print(result)
输出:
[13, 14, 15, 23, 24, 25, 33, 34, 35]
如果您比较嵌套 for 循环的结果及其映射等效项,两者将是相同的。但是,在时间复杂度上,map 等效项优于嵌套 for 循环。