如何从列表中获取最大数及其索引?
我试图从我的列表中找到最大的数字以及它的索引。例如,这是我的清单:
list = [4.3,0.0,6.2214,9.1,1.023990433763,3.839]
我可以用这一行找到最大的数字:
greatest = maximum list
在这个例子中,最大的数字是 9.1,但是我如何显示它的索引(在这个例子中是 3)?
回答
最简单的方法是使用索引显式注释列表,然后在那里进行搜索。
Prelude> zip [4.3,0.0,6.2214,9.1,1.023990433763,3.839] [0..]
[(4.3,0),(0.0,1),(6.2214,2),(9.1,3),(1.023990433763,4),(3.839,5)]
因为元组按Ord字典顺序maximum排列,您实际上可以简单地在该列表上使用:
Prelude> maximum $ zip [4.3,0.0,6.2214,9.1,1.023990433763,3.839] [0..]
(9.1,3)
不过,这有点骇人听闻,因为您至少原则上还可以对索引进行比较,而这并不是您真正想要的。所以更清洁的方法是
> :m +Data.List Data.Ord
> maximumBy (comparing fst) $ zip [4.3,0.0,6.2214,9.1,1.023990433763,3.839] [0..]
(9.1,3)
当然,如果最后你只想要索引,你可以很容易地扔掉这个值:
> snd . maximumBy (comparing fst) $ zip [4.3,0.0,6.2214,9.1,1.023990433763,3.839] [0..]
3