如何基于指定索引参数与规则编写循环生成目标组合列表A?
问题:根据规则生成组合集合A
规则说明
- 公式1:整数列表p,长度为6,索引按升序排列。
- 公式2:整数列表c,长度为6,索引按升序排列。
- 公式3:索引i除以2的余数为q,例如i=1时q=1,i=2时q=0;n=6时q集合为
{1,0,1,0,1,0}。 - 公式4:目标列表P的索引顺序为
n,1,2,…,(n-1),n=6时索引为[6,1,2,3,4,5]。 - 公式5-8:将目标列表P的索引与p、c的索引匹配,n=6时公式5不适用。
- 公式9:A是P的可能组合集合,A的最大长度为奇数,n=6时A的长度可为3或5。
注:公式6-9的索引已通过生成
storage_i列表及对应的q列表解决。
当前需解决的问题:编写代码实现公式6-9,根据storage_i中的索引从p和c中取值生成A。
预期输出
A = [[c_6, c_1, p_2], [c_6, c_1, p_3], ..., [c_3, p_4, c_5], [c_6, c_1, p_2, c_3, p_4], ...., [c_1, p_2, c_3, p_4, c_5]] 或 A = [[20,7,120], [20,7,3], ...,[80,50,9], [20,7,120,80,50], ...,[7,120,80,50,9]]
参数定义
import numpy as np p = [100,120,3,50,200,90] c = [7,100,80,220,9,20] storage_i = [[6, 1, 2], [6, 1, 3], [6, 1, 4], [6, 1, 5], [6, 2, 3], [6, 2, 4], [6, 2, 5], [6, 3, 4], [6, 3, 5], [6, 4, 5], [1, 2, 3], [1, 2, 4], [1, 2, 5], [1, 3, 4], [1, 3, 5], [1, 4, 5], [2, 3, 4], [2, 3, 5], [2, 4, 5], [3, 4, 5], [6, 1, 2, 3, 4], [6, 1, 2, 3, 5], [6, 1, 2, 4, 5], [6, 1, 3, 4, 5], [6, 2, 3, 4, 5], [1, 2, 3, 4, 5]] q = [[0, 1, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1], [0, 0, 1], [0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1], [0, 0, 1], [1, 0, 1], [1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 1], [1, 0, 1], [0, 1, 0], [0, 1, 1], [0, 0, 1], [1, 0, 1], [0, 1, 0, 1, 0], [0, 1, 0, 1, 1], [0, 1, 0, 0, 1], [0, 1, 1, 0, 1], [0, 0, 1, 0, 1], [1, 0, 1, 0, 1]]
取值示例(非Python索引)
示例1:
storage_i[1] = [6, 1, 2],q = [0, 1, 0],则: A_cc = q[6]*p[6] + (1-q[6])*c[6] = 0*90 + (1-0)*20 = 20 A_c = q[1]*p[1] + (1-q[1])*c[1] = 1*100 + (1-1)*7 = 100 A_cc = q[2]*c[2] + (1-q[2])*p[2] = 0*100 + (1-0)*120 = 120 A = [A_cc,A_c,A_cc] = [20,100,120]
示例2:
p = [100,120,3,50,200,90] c = [7,100,80,220,9,20] storage_i = [1, 2, 3],q = [1, 0, 1],则: A_cc = q[1]*c[1] + (1-q[1])*p[1] = 1*7 + (1-1)*100 = 7 A_c = q[2]*p[2] + (1-q[2])*c[2] = 0*120 + (1-0)*100 = 100 A_cc = q[3]*c[3] + (1-q[3])*p[3] = 1*80 + (1-1)*3 = 80 A = [A_cc,A_c,A_cc] = [7,100,80]
当前未完成代码
storage_var_R5 = [] for set_i in storage_i: temp_var_R5 = [] for idx_i in set_i: if idx_i ==n: A_cc = q[idx_i]*p[idx_i] + (1-q[idx_i])*c[idx_i] else: A_c = q[idx_i]*p[idx_i] + (1-q[idx_i])*c[idx_i] A_cc = q[idx_i]*c[idx_i] + (1-q[idx_i])*p[idx_i] temp_var_R5.append()
需补充逻辑,根据规则将对应值添加到列表中,完成A的生成。
内容的提问来源于stack exchange,提问作者Nicholas Nicholas
相关产品推荐
相关产品推荐

