返回列表中某个元素的所有位置,而无需递归,但使用列表生成器

迅速

我们被要求在Haskell中自己编写一个函数,当给定一个列表并且某个元素返回一个新列表时,该函数包含该元素在该列表中的有序位置。

我已经尝试了很长时间了,但是我目前仍然使用递归,该任务表明我们不应该使用递归。

allPositionsOf :: (Eq a) => a -> [a] -> [Int]
allPositionsOf e es = [i | i <- [0 .. (length es - 1)], IsAtPos e es i]
    where
         isAtPos :: (Eq a) => a -> [a] -> Int -> Bool
         isAtPos e (x:xs) 0 
                          |x == e    = True
                          |otherwise = False
         isAtPos e (x:xs) i   = findAtPosition xs e (i - 1)

我知道有!和其他功能相似,但是是否可以仅使用列表生成器并使它更简单?

卡斯滕

我想你想要类似的东西吗?

allPositionsOf :: Eq a => a -> [a] -> [Int]
allPositionsOf b xs = [ i | (i,x) <- zip [0..] xs, x == b]

λ> allPositionsOf 'b' "dfbhjbd"
[2,5]

您几乎已经了解了-唯一我添加了另一个技巧

zip将列表与[0,1,2,...]并排的indize和元素并排,取出一(index,element)对(在此处(i,x)),过滤掉所有内容,x == b然后最终从对中返回indize

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

更新列表中的所有元素而无需循环

来自分类Dev

更新列表中的所有元素而无需循环

来自分类Dev

具有递归和列表理解的素数生成器

来自分类Dev

具有递归和列表理解的素数生成器

来自分类Dev

了解递归函数中的Erlang列表推导生成器

来自分类Dev

将向量中的所有元素与列表中的所有元素进行比较,而无需for循环

来自分类Dev

将向量中的所有元素与列表中的所有元素进行比较,而无需for循环

来自分类Dev

创建具有无限列表的元素生成器

来自分类Dev

重复元素列表生成器

来自分类Dev

加入生成器列表的元素

来自分类Dev

列表列表上的递归生成器

来自分类Dev

使用生成器搜索双重嵌套字典列表中的元素

来自分类Dev

递归函数返回所有连接节点的列表,使用python从网络图中获得某个节点

来自分类Dev

获取列表中的元素,而无需在Python中使用if或for块

来自分类Dev

使用 from_logs 生成器删除某个月份的所有消息

来自分类Dev

返回由生成器或迭代器生成的所有元素的标准方法

来自分类Dev

返回由生成器或迭代器生成的所有元素的标准方法

来自分类Dev

在Python中以递归方式打印列表而无需更改列表

来自分类Dev

在Python中以递归方式打印列表而无需更改列表

来自分类Dev

在OCaml中生成整数列表而无需递归

来自分类Dev

为什么列表理解元素与生成器元素不同,在 Pycharm iPython 提示中?

来自分类Dev

从生成器创建列表

来自分类Dev

生成器列表理解

来自分类Dev

列表生成器混乱

来自分类Dev

如何从JavaScript中的递归生成器函数返回?

来自分类Dev

Laravel:“强制”查询生成器返回空列表

来自分类Dev

如何从无限生成器列表中获取前n个元素?

来自分类Dev

Lambda函数的列表或生成器在Python中不会返回相同的结果

来自分类Dev

在列表中的确切位置插入元素,而无需在Python中调整数组大小?

Related 相关文章

  1. 1

    更新列表中的所有元素而无需循环

  2. 2

    更新列表中的所有元素而无需循环

  3. 3

    具有递归和列表理解的素数生成器

  4. 4

    具有递归和列表理解的素数生成器

  5. 5

    了解递归函数中的Erlang列表推导生成器

  6. 6

    将向量中的所有元素与列表中的所有元素进行比较,而无需for循环

  7. 7

    将向量中的所有元素与列表中的所有元素进行比较,而无需for循环

  8. 8

    创建具有无限列表的元素生成器

  9. 9

    重复元素列表生成器

  10. 10

    加入生成器列表的元素

  11. 11

    列表列表上的递归生成器

  12. 12

    使用生成器搜索双重嵌套字典列表中的元素

  13. 13

    递归函数返回所有连接节点的列表,使用python从网络图中获得某个节点

  14. 14

    获取列表中的元素,而无需在Python中使用if或for块

  15. 15

    使用 from_logs 生成器删除某个月份的所有消息

  16. 16

    返回由生成器或迭代器生成的所有元素的标准方法

  17. 17

    返回由生成器或迭代器生成的所有元素的标准方法

  18. 18

    在Python中以递归方式打印列表而无需更改列表

  19. 19

    在Python中以递归方式打印列表而无需更改列表

  20. 20

    在OCaml中生成整数列表而无需递归

  21. 21

    为什么列表理解元素与生成器元素不同,在 Pycharm iPython 提示中?

  22. 22

    从生成器创建列表

  23. 23

    生成器列表理解

  24. 24

    列表生成器混乱

  25. 25

    如何从JavaScript中的递归生成器函数返回?

  26. 26

    Laravel:“强制”查询生成器返回空列表

  27. 27

    如何从无限生成器列表中获取前n个元素?

  28. 28

    Lambda函数的列表或生成器在Python中不会返回相同的结果

  29. 29

    在列表中的确切位置插入元素,而无需在Python中调整数组大小?

热门标签

归档