鱼C论坛

 找回密码
 立即注册
查看: 132|回复: 3

[已解决]map函数

[复制链接]
发表于 2024-11-12 12:49:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
关于map函数
list(map(lambda x, y : x + y,[1,3,5],[10 ,30,50 ,66 ,88]))
结果是 [11,33,55]
这个结果我不是很理解,有没有大神解答一下
最佳答案
2024-11-12 16:28:54
当使用 Python 的 map() 函数并传入多个可迭代对象(iterable)时,map() 会并行地从每个可迭代对象中取出元素,并将它们作为参数传递给指定的函数。

当其中最短的可迭代对象耗尽时,map() 就会停止。

在你的例子中:
list(map(lambda x, y: x + y, [1, 3, 5], [10, 30, 50, 66, 88]))
第一个列表是 [1, 3, 5],长度为 3。

第二个列表是 [10, 30, 50, 66, 88],长度为 5。

map() 将并行地取出元素进行计算:

1. 第一次迭代:
   - x = 1(来自第一个列表)
   - y = 10(来自第二个列表)
   - 计算 1 + 10 = 11

2. 第二次迭代:
   - x = 3
   - y = 30
   - 计算 3 + 30 = 33

3. 第三次迭代:
   - x = 5
   - y = 50
   - 计算 5 + 50 = 55

此时,第一个列表的元素已经全部取完,所以 map() 停止迭代,尽管第二个列表还有剩余的元素 66 和 88。

因此,最终结果是 [11, 33, 55]。


map() 会在最短的可迭代对象耗尽时停止迭代。

如果希望对所有元素进行操作,可以考虑使所有可迭代对象长度一致,或者使用 itertools.zip_longest()。


itertools.zip_longest():
from itertools import zip_longest

result = [x + y for x, y in zip_longest([1, 3, 5], [10, 30, 50, 66, 88], fillvalue=0)]
print(result)  # 输出:[11, 33, 55, 66, 88]
较短的列表用 fillvalue=0 补足,确保所有元素都被处理。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-11-12 12:55:45 | 显示全部楼层
您的问题中提到的 `map` 函数和 `lambda` 表达式中似乎有一些小的错误,不过我可以解释 `map` 函数的正确使用方式以及如何理解它的结果。

`map` 函数的基本使用结构是:
map(function, iterable1, iterable2, ...)

- `function`:一个函数,它可以接受一个或多个参数。
- `iterable1, iterable2, ...`:一个或多个可迭代对象(如列表、元组等)。`function` 将对每个可迭代对象的元素进行处理。

`map` 的作用是对传入的每个可迭代对象中的元素应用一个函数,返回一个迭代器,其中包含应用函数后得到的结果。

例如,如果您想对两个列表的元素逐个相加,可以这样使用:
list1 = [1, 2, 3]
list2 = [4, 5, 6]

result = list(map(lambda x, y: x + y, list1, list2))
print(result)  # [5, 7, 9]

在上面的例子中,`lambda x, y: x + y` 是一个接受两个参数的函数,它会对 `list1` 和 `list2` 的对应元素进行相加。`map` 返回的是一个迭代器,因此我们使用 `list()` 将其转换为列表,从而可以清楚地看到结果。

确保在调用 `map` 函数时,`lambda` 表达式的参数数量应与可迭代对象的数量匹配。如果您还有其他问题或特定的代码需要帮助分析,请随时补充说明!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-11-12 15:45:25 | 显示全部楼层
本帖最后由 jackz007 于 2024-11-12 16:17 编辑
e = list(map(lambda x , y : x + y , [1 , 3 , 5] , [10 , 30 , 50 , 66 , 88]))
        先看看 map() 函数:
map(func , <可迭代对象> . . .)
        map() 将依次从 <可迭代对象> 中提取参数,调用函数 func() 并记录结果,func() 函数有几个输入参数,<可迭代对象> 就得有几个。
        在本例中
map(lambda x , y : x + y , [1 , 3 , 5] , [10 , 30 , 50 , 66 , 88])
        lambda 函数接收两个输入参数,x 和 y,于是,map() 提供了 2 个可迭代对象,分别对应于 [1 , 3 , 5] 和  [10 , 30 , 50 , 66 , 88],x 有 3 个,y 有 5 个,最终结果的数量取决于较少的那个参数的数量,也就是 x 的个数(3 个)。至于 lambda 函数的计算就比较简单了,新生成的 3 个元素分别是: x[0] + y[0] , x[1] + y[1] , x[2] + y[2]。

        这个表达式如果稍作展开,应该是这个样子:
c , d = [1 , 3 , 5] , [10 , 30 , 50 , 66 , 88]
e = [c[i] + d[i] for i in range(min(len(c) , len(d)))]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-11-12 16:28:54 | 显示全部楼层    本楼为最佳答案   
当使用 Python 的 map() 函数并传入多个可迭代对象(iterable)时,map() 会并行地从每个可迭代对象中取出元素,并将它们作为参数传递给指定的函数。

当其中最短的可迭代对象耗尽时,map() 就会停止。

在你的例子中:
list(map(lambda x, y: x + y, [1, 3, 5], [10, 30, 50, 66, 88]))
第一个列表是 [1, 3, 5],长度为 3。

第二个列表是 [10, 30, 50, 66, 88],长度为 5。

map() 将并行地取出元素进行计算:

1. 第一次迭代:
   - x = 1(来自第一个列表)
   - y = 10(来自第二个列表)
   - 计算 1 + 10 = 11

2. 第二次迭代:
   - x = 3
   - y = 30
   - 计算 3 + 30 = 33

3. 第三次迭代:
   - x = 5
   - y = 50
   - 计算 5 + 50 = 55

此时,第一个列表的元素已经全部取完,所以 map() 停止迭代,尽管第二个列表还有剩余的元素 66 和 88。

因此,最终结果是 [11, 33, 55]。


map() 会在最短的可迭代对象耗尽时停止迭代。

如果希望对所有元素进行操作,可以考虑使所有可迭代对象长度一致,或者使用 itertools.zip_longest()。


itertools.zip_longest():
from itertools import zip_longest

result = [x + y for x, y in zip_longest([1, 3, 5], [10, 30, 50, 66, 88], fillvalue=0)]
print(result)  # 输出:[11, 33, 55, 66, 88]
较短的列表用 fillvalue=0 补足,确保所有元素都被处理。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 19:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表