发布于2019-10-14 21:03 阅读(525) 评论(0) 点赞(12) 收藏(0)
我正在尝试将列表中的一堆元素配对在一起以创建最终对象,其方式类似于对对象求和。我正在尝试使用一个简单的变体,在reduce
其中您考虑成对的列表而不是平面列表来执行此操作。我想按照以下方式做一些事情:
nums = [1, 2, 3]
reduce(lambda x, y: x + y, nums)
除了我要在数字列表中每个元素特定的总和上添加其他信息nums
。例如,对于列表中的每对(a,b),将总和运行为(a + b):
nums = [(1, 0), (2, 5), (3, 10)]
reduce(lambda x, y: (x[0]+x[1]) + (y[0]+y[1]), nums)
这不起作用:
>>> reduce(lambda x, y: (x[0]+x[1]) + (y[0]+y[1]), nums)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
TypeError: 'int' object is unsubscriptable
为什么不起作用?我知道我可以编码nums
为一个平面列表-这不是重点-我只想能够创建一个reduce操作,该操作可以遍历成对的列表,或者同时遍历两个相同长度的列表,并从这两个池中收集信息列表。谢谢。
查看您传递给的lambda reduce
:
f = lambda x, y: (x[0]+x[1]) + (y[0]+y[1])
返回的值f
将作为参数传递给的另一个调用f
。但是,虽然f
期望其参数为对,但返回的值却是int
。您需要使该函数也返回一对。例如,这将分别汇总左侧和右侧:
>>> nums = [(1, 0), (2, 5), (3, 10)]
>>> reduce(lambda x, y: (x[0] + y[0], x[1] + y[1]), nums)
(6, 15)
您可以做的另一件事是,将累加值与列表元素区别对待:int
当列表元素为对时,您可以将累加值设为an 。如果这样做,则必须将initializer
参数传递给reduce
,以便将累加器正确初始化为int
:
>>> nums = [(1, 0), (2, 5), (3, 10)]
>>> reduce(lambda acc, y: acc + y[0] + y[1], nums, 0)
21
作者:黑洞官方问答小能手
链接:https://www.pythonheidong.com/blog/article/136813/2967794ca301c9de2991/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!