给定一个字典和一个序列,用python返回其总数

给定一个字典和一个序列,用python返回其总数,python,list,dictionary,Python,List,Dictionary,我想概括出一种没有进口的方法 给定这三个列表和字典输出序列。所以对于R和S,第一个元素意味着R=0,S=0。我想要的是: 0.8 x 0.5+0.8 x 0.5+0.2 x 0.5+0.2 x 0.5 基本上 (R=0 x S=0)+(R=0 x S=1)+(R=1 x S=0)+(R=1 x S=1),如序列列表所示 我知道我从序列中迭代,但之后我不确定如何同时使用dependent和L 我得走了,所以我不能完成这件事,但我现在就在这里。也许这会帮助你找到解决问题的方法 dependent =

我想概括出一种没有进口的方法

给定这三个列表和字典输出序列。所以对于R和S,第一个元素意味着R=0,S=0。我想要的是:

0.8 x 0.5+0.8 x 0.5+0.2 x 0.5+0.2 x 0.5

基本上

(R=0 x S=0)+(R=0 x S=1)+(R=1 x S=0)+(R=1 x S=1),如序列列表所示


我知道我从序列中迭代,但之后我不确定如何同时使用dependent和L

我得走了,所以我不能完成这件事,但我现在就在这里。也许这会帮助你找到解决问题的方法

dependent = ["R", "S"]

L = {"R": [0.8, 0.2], "S": [0.5, 0.5], "K": [0.1, 0.1]}

sequence = [[0,0], [0, 1], [1, 0], [1,1]]
现在我有点累了

dependent = ["R", "S"]

L = {"R": [0.8, 0.2], "S": [0.5, 0.5], "K": [0.1, 0.1]}

sequence = [[0, 0], [0, 1], [1, 0], [1, 1]]
my_list = []
for item in sequence:
    item_total = 1
    for index in range(len(item) - 1):
        print(L[dependent[index]][item[index]])
        item_total = item_total * L[dependent[index]][item[index]]
        # print(item_total)
    my_list.append(item_total)

print(my_list)
total = sum(my_list)
print(total)

这显然是不正确的,但很接近。只是在某个地方出现了一个索引错误D:

鉴于您不想使用导入,我认为最好的方法是定义 一种功能,例如:

0.8
0.8
0.2
0.2
[0.8, 0.8, 0.2, 0.2]
2.0
得到给定可比函数的笛卡尔积

我们只想将此函数应用于您的从属项,因此首先:

def cartesian(items):
    if len(items) == 0:
        return [[]]
    else:
        return [
            [x] + c 
            for x in items[0] 
            for c in cartesian(items[1:])
        ]
>>> sum([eval("*".join(map(str, c))) for c in cartesian(dep_items)])
1.0
然后计算乘积:

dep_items = [v for k, v in L.items() if k in dependent]
更新

在阅读了您的一条评论后,我相信我误解了
顺序
在您的问题中的作用,即
顺序
始终可用,并且不是由所有组合组成的,因此您不需要
笛卡尔
函数。 在这种情况下,我认为
序列
依赖
应该保持相同的顺序,因此首先:

def cartesian(items):
    if len(items) == 0:
        return [[]]
    else:
        return [
            [x] + c 
            for x in items[0] 
            for c in cartesian(items[1:])
        ]
>>> sum([eval("*".join(map(str, c))) for c in cartesian(dep_items)])
1.0
然后我根据
序列得到组合:

items = [L[k] for k in dependent]
最后计算出乘积之和

我将展示一个示例,其中包含您在注释中请求的特定
依赖项
序列

combos = [[items[i][ind] for i, ind in enumerate(s)] for s in sequence]

如果dep是[“R”,“S”,“K”]并且序列=[[0,0,0],[0,1,0],[1,0,1]],这就不起作用了。@bonsaget在这种情况下你想要R X S X K?都是相乘的吗?基本上我认为?关于序列。Dep可以是[“A”,“B”,“C”,“D”],它的值应该是L。概括起来,这就是我需要的