python - Elixir 中的嵌套理解

标签 python elixir list-comprehension

在 Python 中,可以这样做 [e2 for e1 in edits1(word) for e2 in edits1(e1)]。这个构造在 Elixir 中的等效(和正确)形式是什么?

我试过的是:

def edits2(word) do
  (for e1 <- edits1(word), do: edits1(e1))
  |> Enum.reduce(MapSet.new, fn(item, acc) -> MapSet.union(item, acc) end)
end

但这太慢了,因为我碰巧需要做一个包含数百个列表的 MapSet,每个列表包含 500 多个元素。

最佳答案

好的,所以我最初问题的答案正是@Dogbert 建议的:for e1 <- edits1(word), e2 <- edits1(e1), into: MapSet.new, do: e2

但瓶颈不在于这条特定的线路。参见 https://github.com/visar/spell_check/commit/857653593ca98310db028601e9cfc59dc1ac13a4?diff=split进行一些优化,将特定测试的运行时间在我的机器上缩短到 2 秒以下。

凶手是known/1每次都重新计算单词键 - 有成千上万个 - 但它可以安全地是一个常量,因此编译需要更长的时间但运行速度更快。

关于python - Elixir 中的嵌套理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39520002/

相关文章:

elixir - 唯一索引约束在 Phoenix 应用程序中不起作用

python - 使用 for 循环的列表理解

Python递归序列相关代码

python - R 选取经济衰退期的开始日期和结束日期

Elixir - 通过管道运算符传递部分输出

string - 如何在Elixir中循环遍历字符串中的每个字符?

python - 短路列表理解

python - 增加列表理解中多个 for 循环的时间

python - 从列表列表中获取 (x,y) 坐标

python - 从另一个模块访问对象