map用法python

map用法python

2023年7月26日发(作者:)

map用法python

Map是一个在Python里面被广泛使用的函数。它的作用是将一个函数应用于一个Iterable对象的所有元素,然后将结果作为新的Iterable对象返回。 在这篇文章中,我们将会介绍map函数的用法和解释一些map函数的内部工作原理。

## Map函数的基础用法

Map函数可以接受两个或多个参数。第一个参数是用于应用于所有元素的函数,第二个参数是可迭代的对象。除了这两个参数外,map()函数还可以接受其他参数,这些参数可以传递给函数。

```python def square(x): return x * x

numbers = [1, 2, 3, 4, 5] squared = map(square,

numbers)

print(list(squared)) # Output: [1, 4, 9, 16,

25] ```

在这个例子中,我们定义了一个函数square(x),用于计算x * x的值。然后将这个函数应用到numbers列表的所有元素上,通过将map函数的结果存储在squared变量中,我们可以看到squared列表中有numbers列表中各元素的平方值。 在Python 3中,map()函数返回一个可迭代对象,它可以使用list()函数转换为列表。如果没有转换,它将在下一次迭代中被消耗。

```python def square(x): return x * x

numbers = [1, 2, 3, 4, 5] squared = map(square,

numbers) print(squared) # Output:

0x7f4af94b4f10>

# Use list to consume the map object

squared_list = list(squared) print(squared_list) #

Output: [1, 4, 9, 16, 25]

# Try to get the squared values using squared

object again, but it is empty squared_again =

list(squared) print(squared_again) # Output: [] ```

在这个例子中,我们还看到了另一个重要的概念,那就是在Python 3中,map函数返回的是一个“map”对象。这是一个迭代器,它迭代整个列表并逐步处理所有的元素。由于一个迭代器的性质是一次性的,如果你试图再次迭代,它将是空的。所以,在上面的例子中,第一个迭代值计算了squared_list,因此在第二个迭代值中,squared是空的。

## 通过Lambda函数进行映射 有时,您可能对应用于列表的函数所做的操作非常简单,您不希望定义一个完整的函数来执行它。在这种情况下,可以使用Lambda函数来定义一个匿名函数。

Lambda函数是一个在Python中定义函数的快捷方式。下面是上面的示例的快捷语法。

```python numbers = [1, 2, 3, 4, 5] squared =

map(lambda x: x * x, numbers) print(list(squared))

# Output: [1, 4, 9, 16, 25] ```

这个例子虽然简短,但它能够传达一些很重要的观点,实际上这是使用Python中的map函数最常见的方式。这些Lambda函数旨在执行列表元素上仅仅是应用一个简单的计算。

## 两个参数的序列映射

Map函数可以接受两个可迭代项目。在这种情况下,它将同时遍历两个序列,将每对元素作为参数传递给函数。 如果输入序列具有不同长度,则map将停止在最短序列的前缀结束。

```python list1 = [1, 2, 3, 4, 5] list2 = [10,

20, 30, 40]

def add_lists(x, y): return x + y

result = map(add_lists, list1, list2)

print(list(result)) # Output: [11, 22, 33, 44] ``` 在这个例子中,我们定义了两个列表,一个是list1,一个是list2。我们再定义了一个函数add_lists(x, y),用于接受两个参数,即在List1和List2相应位置的两个元素。函数将两个值相加并返回一个结果。

然后将add_lists()函数应用于list1和list2的对应元素上,从而生成将两个列表中对应维度相加而得到的新列表。 由于list2仅有四项,因此最终结果只包含list1的四个元素。

## 在映射函数中使用更多参数

映射函数可以进一步扩展,可以使用 *args,**kwargs这两个通用参数,这些参数允许您向函数传递多个参数。

```python def add(x, y, z): return x + y +

z

numbers = [1, 2, 3, 4, 5] result = map(lambda

x: add(x, 1, 2), numbers) print(list(result)) #

Output: [4, 5, 6, 7, 8] ```

在上面的示例中,我们定义了一个名为add(x, y, z)的函数。它有三个参数,分别为x,y和z,函数体只是一个简单的表达式,返回所有值的总和。然后,我们将add函数作为Lambda函数传递给map函数,在每个遍历元素上调用function(num,1,2),将数字视为x值-每个元素的y值和2作为其z值。这样,我们可以将列表中的所有值加上3,并得到正确的平移序列。

## 懒加映射

默认情况下,Python 3的map函数只能使用一次。除非您将其转换为列表或迭代器,否则将不再能够访问原始值。

```python x = [1, 2, 3] m = map(lambda x: x *

x, x) print(list(m)) # Returns [1, 4, 9]

print(list(m)) # Returns [] ```

在上述代码中,当我们将一个map对象转换为列表时,它返回您预期的值。但是,当我们尝试再次迭代该对象时,它为空,这是由于Python 3中的map函数实现为“懒加”的映射,即需要计算。对于每次迭代,它都会在列表上使用函数,并返回每个值的计算结果。

一旦函数计算过了每个值,它就遍历到了列表的末尾。现在,它没有更多的计算或结果存储,并且返回一个空结果。因此,默认情况下,只有在迭代结果并计算映射值时才能使用map。

## 组合map和filter

Map和Filter在Python中经常一起使用。Filter是另一种Python内置函数,它可以根据预定义的函数应用筛选提供给它的元素。这些函数可以在筛选器和映射函数的顺序上组合,从而得到所需的结果。

```python numbers = range(10)

def square(x): return x * x

def is_odd(x): return x % 2 == 1

squared_odds = map(square, filter(is_odd,

numbers)) print(list(squared_odds)) # Output: [1,

9, 25, 49, 81] ```

在上述代码中,我们定义了两个功能; 一个是函数square(x),用于返回x的平方。另一个是is_odd(x),用于检查x是否为奇数。

我们使用Python的range()函数来生成一个数字列表,并将其传递到filter函数中,它仅保留列表中的奇数。这样,仅仅得到了奇数而非偶数的所有数字。

现在,将仅仅是奇数的数字列表应用于map函数,并使用square()函数将其平方。这样,我们得到了仅仅是奇数平方值所构成的列表。

这个例子说明了与列表相关的操作,但是也可以用于多个其他操作,例如数据清理和数据规范化等。组合map()和filter()函数,让您能够快速有效地编写数据转换流水线。

## 异常处理 Map和Filter是Python软件开发中非常有用的工具,它们可以帮助您更快速和更有效地解决各种问题。但是在使用它们时,需要注意的一点是它们可能会引发异常。是不错的编程习惯,通过try except快速处理意外的错误。

```python numbers = ['1', '2', '3', '4', '5',

'6', 'seven']

def square(x): return x * x

result = [] for number in numbers: try:

n = int(number) (square(n))

except ValueError: pass

print(result) # Output: [1, 4, 9, 16, 25, 36]

```

在这个例子中,我们定义了一个字符串列表,其中一些是数字,另一些则不是。定义square(x)函数,它接受数字并返回它们的平方。

我们使用Python的int()函数将字符串转换为数字。但是,由于其中某些条目不是数字,因此我们用try

except语句来处理ValueError异常。如果数字非法,那么except语句不执行任何操作,将其跳过。

单独处理坏值的另一种方法是在map()中嵌套异常处理。在下面的示例中,map()函数是嵌套在try块中的。只有在映射函数产生异常时,才会在except块中调用。这很有用,因为可以非常快速地处理无效输入。

```python numbers = ['1', '2', '3', '4', '5',

'6', 'seven']

def square(x): return x * x

result = [] try: result = list(map(lambda

n: square(int(n)), numbers)) except ValueError:

pass

print(result) # Output: [1, 4, 9, 16, 25, 36]

```

在我们看从map函数得到的结果之前,试图把所有的元素从字符串转换成数字。如果失败(由于字符串是'

seven '等无效输入),那么映射函数就会引发ValueError异常。在这种情况下,就跳过操作并将给定坏数据输入的映射结果依次存储在result列表中。

## 总结

在这篇文档中,我们学习了Python map函数的基本知识,它可以帮助我们快速执行简单的计算以及复杂数据转换。我们还研究了map函数的鲁棒性,学习了如何处理异常和错误值。 总之,Python map函数是Python编程的重要部分,帮助我们有效地解决所有类型的问题,所以必须掌握它的使用方法,以便能够为您的Python编程项目中的数据处理提供最佳方法。

发布者:admin,转转请注明出处:http://www.yc00.com/web/1690306253a329687.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信