📜  将嵌套的 for 循环转换为Python中等效的映射

📅  最后修改于: 2022-05-13 01:55:23.836000             🧑  作者: Mango

将嵌套的 for 循环转换为Python中等效的映射

在本文中,让我们看看如何将嵌套的 for 循环转换为Python中的等效映射。

嵌套 for 循环的映射等效项与 for 循环执行相同的工作,但在一行中。等效的映射比嵌套的 for 循环更有效。可以间歇性地停止 for 循环,但不能在其间停止 map函数。

句法:

这可以阐述为

映射函数只是应用指定的函数 在给定的可迭代对象上 并返回修改后的迭代作为结果。

示例:创建嵌套循环

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)


输出:

现在,让我们看看这个嵌套 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 循环。