Dil*_*war 29 haskell list-comprehension
在Haskell中获取列表的最后一个元素的最快方法是什么.同样在下一次迭代中,我想删除列表的第一个和最后一个元素.最优雅的方式是什么?我正在尝试列表理解,但这看起来效率不高!
ick*_*fay 85
您可以使用该last函数获取列表的最后一个元素.
至于如何删除第一个和最后一个元素,你可以使用(init . tail),但我不知道它有多高效.
我认为来自Learn You A Haskell的这张图片显示了列表功能:

ham*_*mar 40
last并且init将做的工作就好了一次性的.但是它们都是O(n),所以如果你需要经常操作列表的两端,就像你似乎暗示的那样,你可能想要考虑使用Data.Sequence,它支持O(1)插入和删除两端的项目.
我将发布Prelude实现,因为它还没有发布:
listLast :: [a] -> a
listLast [x] = x --base case is when there's just one element remaining
listLast (_:xs) = listLast xs --if there's anything in the head, continue until there's one element left
listLast [] = error "Can't do last of an empty list!"
Run Code Online (Sandbox Code Playgroud)
请注意,我更改了函数名称,listLast以便它可以在不与正常Prelude冲突的情况下运行.当然,你可以做到import Prelude hiding(last).