我有一个清单清单:[[43525,3,2],[43615,2,2],[41111,1,2],[74855,5,3]]
我想把这个列表转换成一个元组列表,只取每个列表的第二个和最后一个元素,每次Map到列表上时都加上15*i
(i
是索引)。
以第一个例子为例:[[43525,3,2],[43615,2,2],[41111,1,2],[74855,5,3]]
我想要这样的东西:[(3,2) , (17, 2), (31, 2), (50, 3)]
17 = 3+(15*1)
31 = 1+(15*2)
50 = 5+(15*3)
我已经创建了一个函数,该函数接受列表列表并将其转换为元组列表:
从此[[43525,3,2],[43615,2,2],[41111,1,2],[74855,5,3]]
到这个[(3,2),(2,2),(1,2),(5,3)]
tupleInfo [[]] = []
tupleInfo [[_,x,y]] = [(x,y)]
tupleInfo list = map (\[_,x,y] -> (x,y)) list
2条答案
按热度按时间ryevplcw1#
您尝试执行两个不同的操作:首先你要把列表列表转换成元组列表,其次你要把
15*i
添加到每个元组的第二个元素中,让我们试着写两个不同的函数,然后把它们组合在一起:如果你仔细看一下,它和你写的
tupleInfo
的第一个版本完全一样,只是它去掉了第二个多余的case:map
已经正确地处理了它。正如您所建议的,使用
zipWith
函数非常简单。现在您可以通过将两个函数组合在一起来获得解决方案:我总是喜欢将域逻辑分解为小的自包含函数,然后可以组合这些函数,这样更容易对每个步骤进行推理。
fxnxkyjh2#
答案很简单,我使用了Zipwith函数。