python3-使用函数式编程,实现笛卡尔积

具体代码如下:详见注释

# python3
# 步骤1:dupelms,将 ys,len(xs) -> ys的每个元素扩充为len(xs)个元素 即 [10.15.3.22],len([1,2,3,4])=4 -> [10,10,10,10,15,15,15,15,3,3,3,3,22,22,22,22]
dupelms = lambda lst, n: reduce(lambda s, t: s+t, map(lambda l, n=n: [l]*n, lst))

# 步骤2:combine, 计算笛卡尔积 使用map函数,将两个列表组合为元组列表
# 即:[1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4]与[10,10,10,10,15,15,15,15,3,3,3,3,22,22,22,22] ->
# (1,10)(2,10)(3,10)(4,10)
# (1,15)(2,15)(3,15)(4,15)
# (1,3)(2,3)(3,3)(4,3)
# (1,22)(2,22)(3,22)(4,22)
# combine = lambda xs, ys: map(lambda x, y: (x, y), xs*len(ys), dupelms(ys, len(xs)))
combine = lambda xs, ys: zip(xs*len(ys), dupelms(ys, len(xs)))


# 步骤3:bigmuls,利用filter进行过滤,得到笛卡尔积大于25的结果 ->
# [(3, 10), (4, 10), (2, 15), (3, 15), (4, 15), (2, 22), (3, 22), (4, 22)]
bigmuls = lambda xs, ys: filter(lambda x: x[0] * x[1] > 25, combine(xs, ys))
print(list(bigmuls([1, 2, 3, 4], [10, 15, 3, 22])))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值