gpt4 book ai didi

list - 使用特定索引在 haskell 中切片列表

转载 作者:行者123 更新时间:2023-12-04 13:10:44 25 4
gpt4 key购买 nike

我有这个列表:

[[0,4,1,4],[1,12,1,4],[2,8,1,4],[3,54,2,4],[4,1,2,2]]

我还有另一个列表:[2,3] -- 代表我想从每个子列表中获取的索引

输出应该是这样的:

[[1,4],[1,4],[1,4],[2,4],[2,2]]

另一个例子:

列表:

[[0,4,1,4],[1,12,1,4],[2,8,1,4],[3,54,2,4],[4,1,2,2]]

索引:[0,2,3]

输出应该是这样的:

[[0,1,4],[1,1,4],[2,1,4],[3,2,4],[4,2,2]]

最佳答案

您使用 (!!) :: [a] -> Int -> a 获得具有给定索引的列表中的项目,例如:

Prelude> [0,4,1,4] !! 0
0
Prelude> [0,4,1,4] !! 2
1
Prelude> [0,4,1,4] !! 3
4

因此,我们可以执行映射以获得项目列表的项目:

Prelude> map ([0,4,1,4] !!) [0,2,3]
[0,1,4]

因此,我们可以使用以下方式对列表列表进行切片:

slices :: [Int] -> [[a]] -> [[a]]
slices is = map (<b>(`map` is)</b> . (!!))

例如:

Prelude> slices [0,2,3] [[0,4,1,4],[1,12,1,4],[2,8,1,4],[3,54,2,4],[4,1,2,2]]
[[0,1,4],[1,1,4],[2,1,4],[3,2,4],[4,2,2]]

然而,使用 (!!) 是不安全的:它不能保证列表中有一个具有给定索引的元素,此外,它不是很有效:它需要 O(k ) 获取第 k 个元素。因此最好使用 VectorArray对于在索引超出范围时返回 Nothing 的查找,例如对于 Vector,我们可以使用 (!?) :: Vector a -> Int -> Maybe a .

关于list - 使用特定索引在 haskell 中切片列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65507352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com