Python 3中的flatMap还是bind?
Python提供了提供映射/过滤器类型功能的列表理解。我可以用这个做一个flatMap aka绑定操作吗?我见过使用itertools或其他附加库的解决方案。我可以用核心Python来做这件事吗Python 3中的flatMap还是bind?,python,functional-programming,Python,Functional Programming,Python提供了提供映射/过滤器类型功能的列表理解。我可以用这个做一个flatMap aka绑定操作吗?我见过使用itertools或其他附加库的解决方案。我可以用核心Python来做这件事吗 # this [[x,10*x] for x in [1,2,3]] # will result in unflattened [[1, 10], [2, 20], [3, 30]] 只需在列表中为添加另一个。请参阅 itertools包含在stdlib中,因此根据定义它是“核心Python”。@ad
# this
[[x,10*x] for x in [1,2,3]]
# will result in unflattened [[1, 10], [2, 20], [3, 30]]
只需在列表中为添加另一个。请参阅
itertools
包含在stdlib中,因此根据定义它是“核心Python”。@adsmith:不,根据定义它是“Python stdlib”。OP的意思是作为一种语言功能,比如map
和filter
“或其他附加库”的列表理解语法表明OP可能没有意识到itertools
是Python的一部分。只是因为我不想为了纯粹的学术目的而重新发明轮子,itertools
的解决方案是什么?请参阅。有关说明,列表comp的编写顺序与您为循环编写的顺序相同。首先你要对[1,2,3]中的x进行:
然后对[x,10*x]中的y进行缩进和:
,然后生成y
或者你喜欢的任何东西。对我来说,这仍然感觉像是向后排序(对于y in[x,10*x]对于x in[1,2,3]
对我来说从左到右更有意义),但你已经做到了。@adsmith:如果你用添加过滤,那么从右到左的变体会很尴尬,如果哦,无论哪种方式都有意义,只要我在看到for循环的时候,我都必须侧着脑袋去看“嵌套”列表理解如下。这很有效。语法似乎不合逻辑。非嵌套理解的源在右边,产生的值在左边。这种嵌套的工作顺序相反,没有明显的逻辑。现在不管优雅与否都可以。
[y for x in [1, 2, 3] for y in [x, 10*x]]
from functools import reduce
def flatMap(array: List[List]): List
return reduce(list.__add__, array)
# or return reduce(lambda a,b: a+b, array)