在python中,你可能会做类似的事情
i = (0, 3, 2)
x = [x+1 for x in range(0,5)]
operator.itemgetter(*i)(x)
Run Code Online (Sandbox Code Playgroud)
得到(1, 4, 3).在(emacs)lisp中,我编写了这个名为extract的函数,它执行类似的操作,
(defun extract (elems seq)
(mapcar (lambda (x) (nth x seq)) elems))
(extract '(0 3 2) (number-sequence 1 5))
Run Code Online (Sandbox Code Playgroud)
但我觉得应该有内置的东西?我所知道的是first, last, rest, nth, car, cdr......走的路是什么?〜提前谢谢〜
如果您的问题是速度,则使用 (vector 1 2 3 4 5) 而不是列表,并使用 (aref vec index) 来获取元素。
(defun extract (elems seq)
(let ((av (vconcat seq)))
(mapcar (lambda (x) (aref av x)) elems)))
Run Code Online (Sandbox Code Playgroud)
如果您要多次从同一序列中提取数据,那么将序列仅存储在向量中一次是有意义的。Python 列表确实是一维数组,LISP 中的等价物是向量。
| 归档时间: |
|
| 查看次数: |
1017 次 |
| 最近记录: |