是否有一个简洁的emacs lisp相当于Python的[n:m]列表切片?

Bri*_*ell 21 python emacs elisp

令我惊讶的是,我发现自己在emacs lisp中遗漏的一件事是特定的列表操作.我想念Python的简洁列表切片.

>>> mylist = ["foo", "bar", "baz", "qux", "frobnitz"]
>>> mylist[1:4]
['bar', 'baz', 'qux']
Run Code Online (Sandbox Code Playgroud)

我看到的功能butlastnthcdrEmacs的文档中,这将使从这样的代码相同的结果:

(setq mylist '("foo" "bar" "baz" "qux" "frobnitz"))
(butlast (nthcdr 1 mylist) 1)
;; ("bar" "baz" "qux")
Run Code Online (Sandbox Code Playgroud)

有没有得到一个列表的片段比合并更简洁的方式butlastnthcdr

Boz*_*sov 23

当然有:

(require 'cl-lib)
(setq mylist '("foo" "bar" "baz" "qux" "frobnitz"))
(cl-subseq mylist 1 4)
;; ("bar" "baz" "qux")
Run Code Online (Sandbox Code Playgroud)

在现代的Emacs中,请注意cl不推荐使用在Emacs中,这个错误是什么意思?"警告:运行时需要cl包"

  • 大!正确的,有用的答案现在是Stack Overflow,谷歌可以轻松找到它:所有这些都适合世界.:) (2认同)

Mir*_*lov 5

Common Lisp 库很棒,但是如果您的代码库变大并且您想以函数式风格编写简洁的代码,我支持dash.el库,它提供了大量用于列表和树操作的函数。有一个函数的-slice行为就像 Python 的切片:

(-slice (number-sequence 1 10) 1 7 2) ; (2 4 6)
Run Code Online (Sandbox Code Playgroud)

参数按顺序排列:列表、开始、(可选)停止、(可选)步骤。