【问题标题】:Sliding window over seqseq 上的滑动窗口
【发布时间】:2023-03-25 08:02:01
【问题描述】:

在 Clojure 中,在(有限的,不太大的)seq 上设置滑动窗口的最佳方式是什么?我应该只使用drop 和take 并跟踪当前索引,还是我缺少更好的方法?

【问题讨论】:

    标签: clojure seq sliding-window


    【解决方案1】:

    我认为partition 第 1 步可以做到:

    user=> (partition 3 1 [3 1 4 1 5 9])
    ((3 1 4) (1 4 1) (4 1 5) (1 5 9))
    

    【讨论】:

      【解决方案2】:

      如果你想在windows上操作,用map也可以很方便:

      user=> (def a [3 1 4 1 5 9])
      user=> (map (partial apply +) (partition 3 1 a))
      (8 6 10 15)
      user=> (map + a (next a) (nnext a))
      (8 6 10 15)
      

      【讨论】:

        【解决方案3】:

        我不知道partition 可以做到这一点,所以我以这种方式实现了它

        (defn sliding-window [seq length]
          (loop [result ()
                 remaining seq]
            (let [chunk (take length remaining)]
              (if (< (count chunk) length)
                (reverse result)
                (recur (cons chunk result) (rest remaining))))))
        

        【讨论】:

          猜你喜欢
          • 2012-06-03
          • 2014-06-02
          • 1970-01-01
          • 1970-01-01
          • 2015-06-03
          • 2012-03-05
          • 2012-08-08
          • 2012-10-20
          • 1970-01-01
          相关资源
          最近更新 更多