鱼C论坛

 找回密码
 立即注册
查看: 899|回复: 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() 就会停止。

在你的例子中:

  1. 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():

  1. from itertools import zip_longest

  2. result = [x + y for x, y in zip_longest([1, 3, 5], [10, 30, 50, 66, 88], fillvalue=0)]
  3. print(result)  # 输出:[11, 33, 55, 66, 88]
复制代码

较短的列表用 fillvalue=0 补足,确保所有元素都被处理。

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
我是小萌侠 + 5 + 5 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-1 02:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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