2017-03-20 39 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) 
相关问题