如何基于最高概率从列表中获取值?

时间:2019-01-23 08:42:27

标签: python python-3.x

我有一个列表A = [1,2,3,4,5,6,7,8,9,10] 还有一个列表B,该列表给出了列表A的概率,即B = [0.1,0.2,0.3,0.4,0.15,0.6,0.22,0.4,0.3,0.32]

我需要根据A的最高概率从B中选择一个值。这里很明显B中的最高值为0.6,因此我需要从列表6中选择数字A。我如何用python编写代码?

5 个答案:

答案 0 :(得分:2)

如何?

print(max(zip(B,A))[1])

实际上,@ Dim78建议并测量出创建元组(zip()会这样做)比两次搜索(一次搜索最大值,一次搜索其位置)的开销更大。我仔细检查并同意。对于较大的列表或切换到另一个Python版本,效果也不会消失。

当然,如果比较值非常昂贵(对于普通数字而言不是),则搜索找到的最大值可能会很昂贵(因此对于 general 而言,此版本次等。) >

但是对于我们这里遇到的特殊情况,双重搜索实际上 更快(在我尝试过的所有情况下):

python3 -c 'import timeit; print(timeit.timeit("a[b.index(max(b))]", setup="import numpy as np; a=list(np.random.rand(1000000)); b=list(np.random.rand(1000000))", number=100))'
4.586365897208452

python3 -c 'import timeit; print(timeit.timeit("max(zip(b,a))[1]", setup="import numpy as np; a=list(np.random.rand(1000000)); b=list(np.random.rand(1000000))", number=100))'
6.770604271441698

答案 1 :(得分:1)

A = [1,2,3,4,5,6,7,8,9,10]
B = [0.1,0.2,0.3,0.4,0.15,0.6,0.22,0.4,0.3,0.32]
>>> A[max(enumerate(B), key=lambda x:x[1])[0]]
6

@ bro-grammer建议使用zip版本:

>>> max(zip(A,B), key=lambda x:x[1])
6

答案 2 :(得分:1)

如果可以使用numpy:

import numpy as np
print(A[np.argmax(B)])

np.argmax返回max元素的索引。而且,我们可以简单地使用该索引来访问A的元素。

答案 3 :(得分:0)

尝试一下

maxA=A[B.index(max(B))]

您还可以尝试使用NumPy lib中的argmax方法。

答案 4 :(得分:0)

带有字典的选项(也许您以后可以使用此字典):

d = dict(zip(A, B)) # {1: 0.1, 2: 0.2, 3: 0.3, 4: 0.4, 5: 0.15, 6: 0.6, 7: 0.22, 8: 0.4, 9: 0.3}
m = max(d, key=lambda x: d[x]) # 6