具体代码如下:详见注释
# 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])))