如何将一个字符串分成长度为3的字符串列表?

问题描述:

如果我想将诸如“qwertyzxc”(9个元素)(['q','w','e','r','t','y','z','x','c'])之类的字符列表拆分为长度为3的字符串列表,我就会陷入困境。我该怎么做? 实施例:如何将一个字符串分成长度为3的字符串列表?

输入:['q','w','e','r','t','y','z','x','c'] 输出:[['q','w','e'],['r','t','y'],['z','x','c']]

谢谢,一直停留在这个相当长的一段

+0

如果在一个更普遍的版本名单不能被三分之一? –

+0

输入总是9的大小。这只是它被利用的方式。如果它不是9,我想它会给你一个错误信息,说它不是正确的大小。 – Zarolan

+3

Data.List.Split.chunksOf –

如果段长度被固定为3,然后可能会做通过图案如下匹配

segment :: [a] -> [[a]] 
segment []   = [] 
segment [x]   = [[x]] 
segment [x,y]  = [[x,y]] 
segment (x:y:z:rest) = [x,y,z] : segment rest 

*Main> segment [1,2,3,4,5,6,7,8,9] 
[[1,2,3],[4,5,6],[7,8,9]] 
+0

我的GHCI返回* Main> [“..3.2.6 ..”,“9..3.5..1”,“.. 18.64 ..”,“.. 81.29 .. ”, “7 ....... 8”, “67.82 .. ..”, “.. .. 26.95”, “8..2.3..9”, “.. 5.1.3 ..”] 。你知道为什么它使用'''而不是'['?' – Zarolan

+0

因为字符串是一个Char列表,​​而Show实例被定义为以字符串的形式显示字符列表 –

或者你也可以试试这个,具有长度的检查免费:

segment :: [a] -> [[a]] 
segment [a,b,c,d,e,f,g,h,i] = [[a,b,c],[d,e,f],[g,h,i]] 
segment   _   = error "the list hasn't 9 items" 

然后尝试:

> segment [1,2,3,4,5,6,7,8,9] 
[[1,2,3],[4,5,6],[7,8,9]] 

> segment [1,2,3,4,5,6,7,8] 
*** Exception: the list hasn't 9 items 
+0

@Zarolan,字符串是字符列表。 ghci通常显示列表'h':'o':'l':'a':[]'as'“hola” – Nykros

p3::[a] -> [[a]] 
p3 [] = [] 
p3 l = take 3 l : (p3 $ drop 3 l) 

,你可能会注意到,你可以很容易地把它转化为的pN