一、Map函数基础
Python中提供了许多内置函数,其中一个非常实用的函数是map()函数。map()函数是一种可以让我们更加便捷地处理列表、元组等序列数据类型的函数,它能够把一个函数作用于序列中的每个元素,返回一个新的序列,例如:
def square(x): return x**2 print(list(map(square, [1,2,3,4,5]))) #[1, 4, 9, 16, 25]
map()函数接收两个参数,第一个参数是一个函数,第二个参数是一个序列;map()函数将第一个参数所代表的函数作用于第二个参数(序列)中的每个元素,再返回一个新的序列。在上面的例子中,map(square, [1,2,3,4,5])的作用是将列表[1,2,3,4,5]中的每个数应用square()函数,即返回一个新的列表[1,4,9,16,25]。
二、将Map与Lambda Expression结合使用
除了使用常规的函数之外,也可以使用lambda expression来代替,例如:
print(list(map(lambda x: x**2, [1,2,3,4,5]))) #[1, 4, 9, 16, 25]
这种方法的好处在于不必定义一个正式函数,它会自动地为我们创建一个匿名函数,将其应用在序列中;而且由于lambda expression是一个轻量级的函数,所以执行起来非常快。
三、一行代码实现多项运算
有时候我们需要对序列中的每个元素进行多项运算,例如对整数序列执行平方和立方操作,可以通过以下方式实现:
lst = range(1, 6) print(list(zip(lst, lst, lst))) #[(1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4), (5, 5, 5)] print(list(map(lambda x: (x[0], x[1]**2, x[2]**3), zip(lst, lst, lst)))) #[(1, 1, 1), (2, 4, 8), (3, 9, 27), (4, 16, 64), (5, 25, 125)]
在上述代码中,我们使用了zip()函数将序列lst复制了三次,并经过lambda expression的处理,返回了一个由三个元素组成的元组,这个元组代表着这三个元素的平方和立方。由于Python的zip()函数可以接受多个序列作为参数,因此我们只需要传入一个序列,然后让zip()复制多少次,这样就可以让我们在一行代码中对同一个序列运用多项操作。
四、列表推导式与Map联合使用
列表推导式也是Python中的一项强大功能,它可以让我们快速地生成新的列表,而且代码非常简洁,例如:
doubled = [x*2 for x in range(1, 6)] #[2, 4, 6, 8, 10]
但是,有时候列表推导式不太适用,例如在处理嵌套的列表时,此时可以使用嵌套的 map() 和列表推导式,例如:
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print([[row[i] for row in matrix] for i in range(3)]) # [[1, 4, 7], [2, 5, 8], [3, 6, 9]] #使用 Map print(list(map(lambda x: [row[x] for row in matrix], range(3)))) # [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
在上述代码中,我们使用了两个列表推导式和一个map()函数来处理嵌套的列表,第一个列表推导式用于构建一个新的列表,该列表是由每个内层列表的第i个元素组成的;第二个列表推导式用于构建一个新的列表,该列表的元素是map()函数的结果,其中参数lambda x: [row[x] for row in matrix]用于对第一层序列中的每个元素应用,也就是说,map()函数的作用是将第一层序列中每个元素中的第i个数提取出来构建一个新的列表。
五、Map函数保持输入和输出大小一致
需要强调的是,使用 map() 函数时,无论我们传入的参数是多少,map() 函数总是保持输入和输出大小一致。如果传入的参数少于序列长度,map() 函数将在遇到序列末尾时停止迭代;如果传入的参数超出了序列长度,则会填充None。
print(list(map(lambda x,y : x+y , [1, 2, 3], [4, 5]))) # [5, 7]
在上述代码中,我们传递了两个序列作为参数,并且一个序列中的元素多于另一个序列,这时候 map() 函数会按照最短序列的长度来迭代,返回一个新的列表。在此例中,由于序列 [4, 5] 只有两个元素,所以map()函数只会迭代三次,并将序列 [1, 2, 3] 中超出的元素忽略掉。
六、总结
在Python中,map()函数是一种非常实用的函数,它可以对序列中的每个元素应用一个函数,返回一个新的列表。除此之外,lambda expression和列表推导式也是Python编写高效代码的必备工具之一。通过运用这些工具,我们可以快速、高效地处理序列数据类型,为数据科学和机器学习领域所提供的算法和模型提供支持。
原创文章,作者:GAKQ,如若转载,请注明出处:https://www.506064.com/n/141298.html