【问题标题】:Can I have two iterables in the reduce function? (Python)我可以在reduce函数中有两个迭代吗? (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 的简单情况下是否有类似的用法,如“+”、“*”。
  • 你能想出一个输入和期望输出的例子吗?

标签: python lambda reduce qiskit


【解决方案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 部分。
猜你喜欢
  • 2021-05-23
  • 2012-06-04
  • 1970-01-01
  • 1970-01-01
  • 2018-03-29
  • 2016-07-27
  • 2015-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多