首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否有与Python的[n:m]列表切片等效的简洁emacs lisp?

是否有与Python的[n:m]列表切片等效的简洁emacs lisp?
EN

Stack Overflow用户
提问于 2012-11-02 03:50:31
回答 2查看 2.8K关注 0票数 23

令人惊讶的是,我发现自己在emacs lisp中遗漏了一些特殊的列表操作。我很怀念Python简洁的列表切片功能。

代码语言:javascript
复制
>>> mylist = ["foo", "bar", "baz", "qux", "frobnitz"]
>>> mylist[1:4]
['bar', 'baz', 'qux']

我在emacs文档中看到了函数butlastnthcdr,它们会从如下代码中得到相同的结果:

代码语言:javascript
复制
(setq mylist '("foo" "bar" "baz" "qux" "frobnitz"))
(butlast (nthcdr 1 mylist) 1)
;; ("bar" "baz" "qux")

有没有比组合使用butlastnthcdr更简洁的获取列表切片的方法

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-02 06:27:43

当然有:

代码语言:javascript
复制
(require 'cl-lib)
(setq mylist '("foo" "bar" "baz" "qux" "frobnitz"))
(cl-subseq mylist 1 4)
;; ("bar" "baz" "qux")

请注意,在现代Emacs中,cl已被弃用参见In Emacs, what does this error mean? "Warning: cl package required at runtime"

票数 23
EN

Stack Overflow用户

发布于 2014-08-04 00:51:31

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

代码语言:javascript
复制
(-slice (number-sequence 1 10) 1 7 2) ; (2 4 6)

参数的顺序是: list、start、(可选) stop、(可选) step。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13184450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档