我可以在reduce函数中有两个迭代吗? (Python)
Posted
技术标签:
【中文标题】我可以在reduce函数中有两个迭代吗? (Python)【英文标题】:Can I have two iterables in the reduce function? (Python) 【发布时间】:2021-05-23 02:45:00 【问题描述】:假设我有以下命令(使用 Python 和 Qiskit):
a = reduce(lambda x,y: x.compose(y,c),circli, qcla)
(qcla
是一个初始化器)
这里,compose
是一个内部 qiskit 函数,x 和 y 是列表 circli
(可迭代)的元素。我想知道我是否可以在这个 reduce
函数中添加另一个迭代?这里,c
本身在(y,c)
中代表一个坐标,比如[2,3]
,我希望它也能更新。我可以创建另一个包含所有可能的c
的列表并将其添加为另一个可迭代对象吗?谢谢!
【问题讨论】:
减少并不是什么灵丹妙药。它采用一系列对象并通过累积结果重复执行二进制操作:1, 2, 3; + -> 1 + (2 + 3) -> 1 + 5 -> 6
。 compose
函数能够使用两个可迭代序列来做到这一点是否有意义?在我看来不像。 “希望也更新”是什么意思?你能举一个输入和输出的例子吗?根据您要执行的具体操作,可以定义一个执行您想要的功能的函数,但这可能不值得。
@blorgon 非常感谢您的评论!我想我的问题是我是否可以在使用 reduce
函数时以不同的方式调用相同的函数 compose
。 compose
函数接受一个“坐标”参数,所以我想知道这个函数在reduce
的简单情况下是否有类似的用法,如“+”、“*”。
你能想出一个输入和期望输出的例子吗?
【参考方案1】:
可以减少对的列表(可迭代),也可以在最后创建一个对。对于第一个,您需要 zip
函数,对于后一个,您需要修改 lambda 函数以返回一个元组。例如:
a, x_sum = reduce(lambda x,y: (x[0].compose(y[0], y[1]), x[1][0]+y[1][0]), zip(circli, cs), (qcla, 0))
我在这里使用名称 cs
作为 c
值的列表。
zip
创建一对 circli
和 cs
项目,您可以通过这些对。在这种情况下,我也会得到 c
值的 x 坐标之和作为结果。
如果cs
中的值是您示例中的常量c
(cs = [c]*len(circli)
),则结果中的a
将与您示例中的相同。
【讨论】:
非常感谢回答,不好意思我的意思是c
本身代表一对坐标,比如[2,3]
是的,那么 + 运算符将不起作用。我更正以获得 x 坐标的总和,但我想你只需要 zip 部分。以上是关于我可以在reduce函数中有两个迭代吗? (Python)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 PHP 中退出数组迭代函数(array_reduce)