我有一个列表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编写代码?
答案 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