Python 更改映射表达式中函数的建议

Python 更改映射表达式中函数的建议,python,function,numpy,Python,Function,Numpy,我想知道是否有一种更简洁的方法来执行以下操作: hL, tL, rL = map(lambda m: len(set(m)), [h, t, r]) hL, tL, rL = map(len . set, [h, t, r]) 当h、t、r是numpy数组时,我要执行以下操作: hL, tL, rL = map(lambda m: len(set(m)), [h, t, r]) hL, tL, rL = map(len . set, [h, t, r]) 它计算单个数组中非重复项的数量。

我想知道是否有一种更简洁的方法来执行以下操作:

hL, tL, rL = map(lambda m: len(set(m)), [h, t, r])
hL, tL, rL = map(len . set, [h, t, r])
h
t
r
是numpy数组时,我要执行以下操作:

hL, tL, rL = map(lambda m: len(set(m)), [h, t, r])
hL, tL, rL = map(len . set, [h, t, r])
它计算单个数组中非重复项的数量。然而,lambda的表情像一个酸痛的拇指一样突出。如果不重复的事情不是问题,我会写:

hL, tL, rL = map(len, [h, t, r])
这太酷了。我们完全省略了lambda表达式。在Haskell中涉猎了几个月之后,我真的开始相信Python应该能够在Haskell中提供像
这样的链接操作符,这样第一个表达式就可以简化为以下内容:

hL, tL, rL = map(lambda m: len(set(m)), [h, t, r])
hL, tL, rL = map(len . set, [h, t, r])
哪一个更好


我看到一些东西使用了
reduce
方法来实现这一点,但这比前面的方法更难看。我想知道是否有人知道一些可以解决问题的方法?我知道非严格求值可能会导致程序不稳定,但当我们处理像这样简单的事情时,这不应该引起关注。

Python不提供组合运算符

使用如何


要计算numpy数组中唯一元素的数量,可以使用
unique(x).size
len(unique(x))
(请参阅)。如果你真的想把三个长度的计算变成“一行”,你可以写:

hL, tL, rL = [len(unique(x)) for x in h, t, r]

在重要的情况下:对于中到大型阵列,
unique(x)
可以比
set(x)
快很多,但是对于小型阵列,
set(x)
更快。(我还没有研究过各种数组大小和数据类型的性能,所以我将保留“大”和“小”的未定义。请自己测试它——但只有在这段代码是性能瓶颈的情况下才测试。)

实际上,这看起来更好。谢谢我真的很喜欢这个答案,谢谢!