gpt4 book ai didi

python - Python中具有默认值的多列表迭代

转载 作者:太空宇宙 更新时间:2023-11-04 02:48:59 27 4
gpt4 key购买 nike

我正在运行一个 python 模拟实验,需要创建一个输入案例列表。

每个案例都是从参数列表中获取的一个实例,例如:

heights = [100,110,120]
alphas = [0.1,0.01,0.001]
C = [0.1,0.2,0.5,0.9]
B = [1,2]

列表的列表是:

params = [heights,alphas,C,B]

原始数量较大 (~30x100),因此直接处理每个列表效率不高。

最终每个输入案例都是来自每个类别的一个参数的元组/命名元组/字典,例如:

instance = {'height':100, 'alpha':0.1,'C:0.1, 'B':1}

我想迭代参数空间以创建实例列表 - 但这里是问题:

不是制作所有这些的笛卡尔积,我想针对每个参数迭代所有选项,同时将其余类别设置为默认值(第一个)。例如:

params = [[1,2,3],[4,5][7,8]]

预期的实例集(没有重复)是:

[(1,4,7),(2,4,7),(3,4,7),(1,5,7)(1,4,8)]

其中 1 是第一个索引的默认值,4 是第二个索引的默认值,7 是第三个索引的默认值。

使用 itertools 制作笛卡尔积非常容易:

from itertools import product
params = [[1,2,3],[4,5],[7,8]]
list(product(*params))

[(1, 4, 7), (1, 4, 8), (1, 5, 7), (1, 5, 8), (2, 4, 7), (2, 4, 8), (2, 5, 7), (2, 5, 8), (3, 4, 7), (3, 4, 8), (3, 5, 7), (3, 5, 8)]

然后我可以过滤掉不必要的实例,但首先生成它们听起来效率低下。有没有什么优雅的方法来构建这个迭代?

最佳答案

params = [[1, 2, 3], [4, 5], [7, 8]]
default = [par[0] for par in params]
instances = set()

for ii, pp in enumerate(params):
for value in pp:
new_instance = default[:ii] + [value] + default[ii + 1:]
instances.add(tuple(new_instance))

关于python - Python中具有默认值的多列表迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44397882/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com