2017-03-20 41 views
-2

我有一個如下列表lst = [[0.6,0.3,0.1], [0.2,0.4,0.3], [0.9,0.1,0]](只有非負值)。我想要做的是使用每個子列表中的一個值來計算第n個最高值(通過乘法)。確定Python中列表中的第n個最高值

要獲得最高值,您可以簡單地獲取每個子列表的最大值並將它們相乘,以獲得第一個最高值0.6 * 0.4 * 0.9。第二高的價值將是0.6 * 0.3 * 0.9。你將如何創建一個功能來做到這一點?

我知道有維特比算法獲得最佳序列,但是,這個問題是不一樣的維特比所需要的。

+4

你有什麼迄今所做? –

+4

SO不是一個代碼寫作服務,如果你想得到一個正確的答案,你應該用你迄今已經嘗試過的代碼更新你的問題,並告訴我們這是什麼問題。 – Kasramvd

+0

你能解釋第二個最高值是如何計算的嗎?它是通過從每個子列表中取得第二高和採取產品? – Himaprasoon

回答

2

只需計算它們,對它們進行排序並選擇第n個最高的那個。

>>> lst = [[0.6,0.3,0.1], [0.2,0.4,0.3], [0.9,0.1,0]] 
>>> n = 2 

>>> from itertools import product 
>>> from functools import reduce, partial 
>>> from operator import mul 

>>> sorted(map(partial(reduce, mul), product(*lst)))[-n] 
0.162 
-1

例修真名單:

lst = [[0.6,0.3,0.1], [0.2,0.4,0.3], [0.9,0.1,0]] 
maximums = [max(x) for x in lst] 
score = reduce(lambda x, y: x * y, maximums) 
相關問題