我有一个列表如下df %>% foo(a, b)
## # A tibble: 1 × 2
## a b
## <dbl> <dbl>
## 1 1.5 18.48936
df %>% group_by(a) %>% foo(b)
## # A tibble: 2 × 2
## a b
## <int> <dbl>
## 1 1 5.5
## 2 2 22.0
mtcars %>% foo(mpg, hp)
## mpg hp
## 1 20.09062 146.6875
mtcars %>% group_by(cyl, am) %>% foo(hp, mpg)
## # A tibble: 6 × 4
## cyl am hp mpg
## <dbl> <dbl> <dbl> <dbl>
## 1 4 0 84.66667 22.90000
## 2 6 0 115.25000 19.12500
## 3 8 0 194.16667 15.05000
## 4 4 1 81.87500 28.07500
## 5 6 1 131.66667 20.56667
## 6 8 1 299.50000 15.40000
(只有非负值)。我想要做的是使用每个子列表中的一个值计算第n个最高值(通过乘法)。
要获得最高值,您可以简单地取每个子列表的最大值并将它们相乘以得到第一个最高值lst = [[0.6,0.3,0.1], [0.2,0.4,0.3], [0.9,0.1,0]]
。第二高的值是0.6 * 0.4 * 0.9
。你会如何创建一个函数来做到这一点?
我知道维特比算法可以获得最佳序列,但是,这个问题与维特比所需的问题不同。
答案 0 :(得分: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 :(得分:-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)