《礼记》中的嵌套理解

2024-10-03 13:21:28 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python中,可以这样做[e2 for e1 in edits1(word) for e2 in edits1(e1)]。在长生不老药中,这种构造的等价形式是什么?你知道吗

我尝试的是:

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

但这是非常慢,因为它发生了,我需要做一个数百个列表,每个包含500+元素的映射集。你知道吗


Tags: infordefitemdo形式wordend
1条回答
网友
1楼 · 发布于 2024-10-03 13:21:28

好吧,我的第一个问题的答案就是@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每次都在重新计算单词键——有成千上万个键——但它可以安全地成为一个常量,因此编译需要更长的时间,但运行速度要快得多。你知道吗

相关问题 更多 >