J. *_*ini 7 python common-lisp python-itertools starmap
Python 的 Itertools 有所谓的starmap. 给定一个集合和一个函数,它将函数严格应用于集合内部的每个集合,并使用所述内部集合的元素作为函数的参数。例如,
from itertools import starmap\n\xc2\xa0\nNestedList = [(1, 2), (3, 4), (5, 6), (0, 0), (1, 1), (2, 2)]\n\nlist(starmap(lambda x, y:x + y, NestedList))\nRun Code Online (Sandbox Code Playgroud)\n返回包含 3、7、11、0、2 和 4 的列表。
\n我不相信 Python 是第一个提出这个概念的人,但当我试图思考它在旧语言中的名称时,我却一片空白。Common Lisp 中是否存在类似的功能?我确信确实如此,但我无法命名。
\n(defun starmap (f list)
(mapcar (lambda (x) (apply f x)) list))
Run Code Online (Sandbox Code Playgroud)
或者loop使用关键字collect:
(defun starmap (f list)
(loop for x in list
collect (apply f x)))
Run Code Online (Sandbox Code Playgroud)
例子:
> (starmap (lambda (x y) (+ x y)) '((1 2) (3 4) (5 6) (0 0) (1 1) (2 2)))
(3 7 11 0 2 4)
> (starmap #'expt '((1 2) (3 4) (5 6) (0 0) (1 1) (2 2)))
(1 81 15625 1 1 4)
Run Code Online (Sandbox Code Playgroud)
\n\n我不相信 Python 是第一个提出这个概念的人,但当我试图思考它在旧语言中的名称时,我却一片空白。[...]我确信确实如此,但我无法命名。
\n
为了解决这个特定问题,请考虑 Lispers 或更一般的函数式程序员会说:“函数map”apply。\n因此,一个自然的名称将是mapply。
通过查找该名称,您可以看到确实有像Serapeum这样的库定义了它,而且还可以看到 1992 年以来对该函数的较旧引用(具有相同的含义)(H. Baker:Look\'Lively Linear Lisp \ xe2\x80\x94 \'看,妈,没有垃圾!\'),也可能在那之前。
\n事实上,Python 使用与解释其名称*相同的方式来扩展值列表。applystarmap
| 归档时间: |
|
| 查看次数: |
153 次 |
| 最近记录: |