【发布时间】:2019-07-09 11:13:45
【问题描述】:
我在 clojure a 和 b 中有两个长度相同的列表。我想做以下事情
for i in range(len(a)):
if a[i] == b[i]:
do_something(a[i], b[i])
我尝试过但没有奏效。 for 不会遍历对应的元素,而是遍历所有可能的组合:
(for [i a j b] (do-something i j))
【问题讨论】:
-
...也就是说,Clojure 的
for也不等同于 Python 的for(它很懒,并且不强制评估);我想知道你是否想要doseq。 -
也就是说——你的 Clojure 参数是什么类型的?如果它们是向量,则可以直接翻译 Python 代码(对于常规的
seqs,预先获取长度可能是一项昂贵的操作)。 -
嗯。真的,您可以只使用
(doall (map do-something a b))而根本不需要循环。 -
doall 被证明效率更高。
-
嗯。它会更高效一点,因为它不会创建只是收集垃圾的瞬态向量,但如果它更有效更有效,我很好奇我们是否还有其他事情要做。
标签: clojure