我正在尝试计算一些句子概率。
我有一本字典,其中包含一些不同字母的值:
{'a': 0.2777777777777778, 'b': 0.3333333333333333, 'c': 0.3888888888888889}
然后在列表中有单独的句子,例如:
['aabc', 'abbcc', 'cba', 'abcd', 'adeb']
我想做的是一些概率计算,以便它搜索列表中的句子并将其值相乘
aabc
将是0.2777*0.2777*0.3333*0.388888
我将如何在此列表中搜索每个独立的字符串并进行乘法运算?
答案 0 :(得分:2)
您可以使用reduce
将句子减为最终概率(请注意,如果一个字符没有概率,我只需使用1来相乘):
from functools import reduce
probs = {'a': 0.2777777777777778, 'b': 0.3333333333333333, 'c': 0.3888888888888889}
sentences = ['aabc', 'abbcc', 'cba', 'abcd', 'adeb']
result = [reduce(lambda acc, curr: probs.get(curr, 1) * acc, s, 1) for s in sentences]
print(result)
# [0.010002286236854138, 0.004667733577198597, 0.0360082304526749, 0.03600823045267489, 0.09259259259259259]
答案 1 :(得分:1)
这是一种非常简单的方法:
<table id="productTable" border="1">
<thead>
<tr>
<th>PID</th>
<th>Select Product1</th>
<th>Select Product2</th>
</tr>
</thead>
<tbody>
<tr>
<td>100</td>
<td>
<select class="product1" >
<option value=""></option>
</select>
</td>
<td>
<select class="product2" >
<option value=""></option>
</select>
</td>
</tr>
......
如果我们要检查字典中是否有值,我们可以执行以下操作并改用values = {'a': 0.2777777777777778, 'b': 0.3333333333333333, 'c': 0.3888888888888889, 'd':0.1234, 'e':0.5678}
strings = ['aabc', 'abbcc', 'cba', 'abcd', 'adeb']
for string in strings:
product = 1
for char in string:
product *= values[char]
print(product)
:
unk
答案 2 :(得分:0)
您可以使用double for循环。外部for
会遍历句子列表,内部for
会遍历句子中的每个字母。 Python for循环语法为for item in iterable_object: <code to run>
。尝试使用此信息,看看可以得到多远。
答案 3 :(得分:0)
您可以使用列表理解和for循环来执行此操作。
def prob(string, prob):
out = 1;
probs = [prob[char] for char in string]
for x in probs:
out *= x;
return out
prob
是概率的字典,string
是字符串。 in
遍历字符串中的每个字符。