我应该如何划分列表?(不使用库)
How should I partition a list?(Without using libraries)
我应该如何对列表进行分区?(不使用库)
例如:
输入
[0,1,1,1,1,0,0,0,1]
输出
[[0,1,1],[1,1,0],[0,0,1]]
我已经通过在列表理解中使用 take 和 drop 来做到这一点。(我遇到了麻烦,因为我写了 take first 和 drop second,给了我不正确的分区)
这是对我有用的方法
[ drop ((size)*x) (take ((size)*(x+1)) (list)) | x<-[0..size]]
您可以递归地每次在 n 个元素之后拆分列表,然后生成第一个项目,并递归其余项目,因此:
partition :: Int -> [a] -> [[a]]
partition n = go
where go [] = []
go xs = ys : go yss
where (ys, yss) = splitAt n xs
例如:
ghci> partition 3 [0,1,1,1,1,0,0,0,1]
[[0,1,1],[1,1,0],[0,0,1]]
我应该如何对列表进行分区?(不使用库)
例如:
输入
[0,1,1,1,1,0,0,0,1]
输出
[[0,1,1],[1,1,0],[0,0,1]]
我已经通过在列表理解中使用 take 和 drop 来做到这一点。(我遇到了麻烦,因为我写了 take first 和 drop second,给了我不正确的分区)
这是对我有用的方法
[ drop ((size)*x) (take ((size)*(x+1)) (list)) | x<-[0..size]]
您可以递归地每次在 n 个元素之后拆分列表,然后生成第一个项目,并递归其余项目,因此:
partition :: Int -> [a] -> [[a]]
partition n = go
where go [] = []
go xs = ys : go yss
where (ys, yss) = splitAt n xs
例如:
ghci> partition 3 [0,1,1,1,1,0,0,0,1]
[[0,1,1],[1,1,0],[0,0,1]]