我正在尝试使用 clojure 中的给定步骤迭代列表。
在 python 中我会做以下事情:
xs = list(range(10))
xs[::2]
# out: [0, 2, 4, 6, 8]
xs[1::2]
# out: [1, 3, 5, 7, 9]
我想不出一个感觉惯用的 clojure 解决方案。
这是我能想到的最好的:
(defn iterate-step-2 [xs]
(map first (take-while some? (iterate nnext xs))))
(iterate-step-2 (range 10))
; out: (0 2 4 6 8)
(iterate-step-2 (rest (range 10)))
; out: (1 3 5 7 9)
但它不像 python 解决方案那样通用(步骤不可配置)和灵活。而且它看起来过于复杂。
有更好的方法吗?
最佳答案
您可以为此使用take-nth
:
user=> (take-nth 2 (range 10))
(0 2 4 6 8)
user=> (take-nth 2 (rest (range 10)))
(1 3 5 7 9)
https://stackoverflow.com/questions/65045956/