📜  Python – 地图与列表理解

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

Python – 地图与列表理解

假设我们有一个函数,我们想在一行代码中为不同的值计算这个函数。这就是map()函数发挥作用的地方! map()函数在将给定函数应用于给定可迭代对象(列表、元组等)的每个项目后返回结果的映射对象(它是一个迭代器)

例子:

# function to double the number
def num (n) :
    return n * 2
          
lst = [2, 44, 5.5, 6, -7]
  
# suppose we want to call function
# 'num' for each element of lst,
# we use map
  
# creates a map object
x = map(num, lst) 
print(x) 
  
# returns list
print(list(x))  

输出:


[4, 88, 11.0, 12, -14]

注意:有关详细信息,请参阅Python map()函数。

列表理解是 lambda函数、 map()filter()reduce()的替代品。它遵循数学集合构建符号的形式。它提供了一种简洁的方式来创建列表。

句法:

[ expression for item in list if conditional ]

参数:

  • 表达式 -基于用于每个元素的变量
  • for ..in – 'for' 后跟要使用的变量名,后跟 'in'
  • if –过滤

例子:

lst = [2, 44, 5.5, 6, -7]
  
# to double the number
# list comprehension
x = [i * 2 for i in lst ] 
print(x)

输出:

[4, 88, 11.0, 12, -14]

注意:有关详细信息,请参阅Python列表理解和切片。

Map VS List 理解

  • 与地图相比,列表理解更简洁,更易于阅读。
  • 列表推导允许过滤。在地图上,我们没有这样的设施。例如,要打印 100 范围内的所有偶数,我们可以编写[n for n in range(100) if n%2 == 0] 。地图中没有替代品
  • 当需要结果列表时使用列表推导,因为 map 只返回一个 map 对象并且不返回任何列表。
  • 当我们需要评估太长或太复杂而无法表达的表达式时,列表推导比映射更快
  • 在调用已定义函数的情况下,映射更快(因为不需要 lambda)。

    比较执行时间

    注意:我们将使用内置的Python库“ timeit ”。

    • 没有 lambda

      让我们通过一个简单的操作来打印给定范围内的数字。我们一个一个地使用映射和列表理解来执行这个操作。


      从上面的示例中,我们可以得出结论,当一个函数已经定义时,map 的性能优于列表推导。

    • 在地图中使用 lambda
      让我们在 map() 中需要 lambda 的地方进行操作。第一个操作是给给定范围内的每个数字加 2。第二个操作是对给定范围内的每个数字求平方。

      从上面的代码中,我们可以观察到 map 仍然比列表理解更好。

      注意:在某些情况下,在表达式太长且太复杂的情况下,列表推导可以比映射执行得更好。