我可以在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 -> 6compose 函数能够使用两个可迭代序列来做到这一点是否有意义?在我看来不像。 “希望也更新”是什么意思?你能举一个输入和输出的例子吗?根据您要执行的具体操作,可以定义一个执行您想要的功能的函数,但这可能不值得。 @blorgon 非常感谢您的评论!我想我的问题是我是否可以在使用 reduce 函数时以不同的方式调用相同的函数 composecompose 函数接受一个“坐标”参数,所以我想知道这个函数在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 创建一对 circlics 项目,您可以通过这些对。在这种情况下,我也会得到 c 值的 x 坐标之和作为结果。

如果cs 中的值是您示例中的常量c (cs = [c]*len(circli)),则结果中的a 将与您示例中的相同。

【讨论】:

非常感谢回答,不好意思我的意思是c本身代表一对坐标,比如[2,3] 是的,那么 + 运算符将不起作用。我更正以获得 x 坐标的总和,但我想你只需要 zip 部分。

以上是关于我可以在reduce函数中有两个迭代吗? (Python)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中退出数组迭代函数(array_reduce)

Python 高阶函数的使用

高阶函数

python三个重要的内置函数(map, filter,reduce)-

018.Python迭代器以及map和reduce函数

reduce函数原理