|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
关于map函数
list(map(lambda x, y : x + y,[1,3,5],[10 ,30,50 ,66 ,88]))
结果是 [11,33,55]
这个结果我不是很理解,有没有大神解答一下
当使用 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 补足,确保所有元素都被处理。
|
评分
-
查看全部评分
|