clojure - 使用 clojure 中的给定步骤迭代列表

我正在尝试使用 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/

相关文章:

angular - 如何在 ngBootstrap 和 Angular 中监听模态的关闭事件?

linux - 如何使用 xargs 将 ls 通过管道传输到 cat 中,以便列出文件名?

algorithm - GPU 上的线性排序。并行处理会改变 Big-O 吗?

git - 为什么我没有得到相同的 SHA-1?

xml - 如何使用 ConvertTo-Xml 和 Select-Xml 加载或读取 XML 文件

git - Git 中基于内容的寻址有什么好处?

ios - 为什么 addTarget 在 Swift 中没有被删除?

linux-kernel - linux cdc_ecm 驱动程序与 rndis 驱动程序

python - 将 2 个字节从字节数组转换为一个整数

ansible - 删除文件夹文件夹内早于 x 天的文件