我一直试图从一系列整体列表中获取一个列表列表,例如:
[[0,0,1,4,7,10,11,12,16],[1,4,4,6,7,7,12,12,19],[0,0,0,2,4,7,11,12,13]]
应该产生[[0,1,0],[0,4,0],[1,4,0]
..等等]
我可以使用
获取[0,1,0]
map head saidList
所以我一直在尝试在列表的尾部使用它,但我无法弄明白。
任何帮助都会受到极大的赞赏,因为这是一个巨大项目的最后一小部分。
答案 0 :(得分:9)
查看Data.List
ghci> :t Data.List.transpose
Data.List.transpose :: [[a]] -> [[a]]
ghci> Data.List.transpose [[0,0,1,4,7,10,11,12,16],[1,4,4,6,7,7,12,12,19],[0,0,0,2,4,7,11,12,13]]
[[0,1,0],[0,4,0],[1,4,0],[4,6,2],[7,7,4],[10,7,7],[11,12,11],[12,12,12],[16,19,13]]
答案 1 :(得分:3)
你的方法
map head l
仅生成第一个列表,并且只有在原始列表列表中的所有列表都不为空时才有效。
您需要一种方法来丢弃空列表(您不想占用这些列表),然后将一种方法应用于非空列表的尾部。这是一个可能的解决方案:
filterNonNull x = filter (\y -> not (null y)) x
f x = if null h then [] else h : t
where
n = filterNonNull x
h = (map head n)
t = f (map tail n)
我在ghci上测试了它:
f [[1, 2, 3], [4, 5, 6],[7,8]]
给出
[[1,4,7],[2,5,8],[3,6]]