【问题标题】:iterator/generator to produce all possible cases in a control system迭代器/生成器在控制系统中产生所有可能的情况
【发布时间】:2012-01-26 17:34:12
【问题描述】:

python新手在这里。我正在编写代码来控制具有多个变量的实验。变量在 csv 文件中定义,如下所示:

Temp, Voltage, Pressure
23, 4.8, 19
23;28, 4.8, 19;23

我阅读了文件并创建了一个字典,这部分工作正常。例如第一行将是:

{'Temp': ['23'], 'Voltage': ['4.8'], 'Pressure': ['19']}

这将控制一个实验。 第二行将是:

{'Temp': ['30', '28'], 'Voltage': ['4.8'], 'Pressure': ['19', '23']}

我想要的是一种从该行按顺序生成所有可能字典的方法。例如第二行将扩展为四个实验:

{'Temp': ['30'], 'Voltage': ['4.8'], 'Pressure': ['19']}
{'Temp': ['30'], 'Voltage': ['4.8'], 'Pressure': ['23']}
{'Temp': ['28'], 'Voltage': ['4.8'], 'Pressure': ['19']}
{'Temp': ['28'], 'Voltage': ['4.8'], 'Pressure': ['23']}

顺序很重要(最后一列是内循环)。我有一个列表,其中包含我想要迭代的顺序的键。例如:

('Temp', 'Voltage', 'Pressure')

在这种情况下。

这过于简单化了,系统中有大量的变量(列)。

我正在考虑一个带有计数器的并行字典来跟踪每个变量的可能情况和当前情况,但也许我错过了一种更优雅的方式来在 python 中表达这一点。

问候,

--ga

【问题讨论】:

  • 我怀疑itertools.product()可以在这里使用:docs.python.org/py3k/library/itertools#itertools.product
  • @ThomasK 它看起来更像是一个答案而不是评论
  • @0xc0de:这还不够完整,无法回答。 AdamKG 写了更完整的描述,但仍需要扩展以应对任意数量的列。
  • 说到列:首先不要将变量放在字典中可能更容易,因为您需要它们以已知的顺序使用product()(并且字典是无序的)。

标签: python python-3.x


【解决方案1】:

是的,你想要itertools.product()。您只需从字典中提取列表并使用您的字典结构重新包装结果。

from itertools import product
def _combinations_for_record(d):
    for tmp, vlt, prs in product(d['Temp'], d['Voltage'], d['Pressure']):
        yield {"Temp": [tmp], "Voltage": [vlt], "Pressure": [prs]}

【讨论】:

  • 谢谢,这正是我所需要的。因为我有很多参数,所以我需要稍微改变一下,所以我不必在函数中硬编码参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-31
  • 2018-05-16
  • 1970-01-01
  • 1970-01-01
  • 2020-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多