通过函数式编程,是否有解决python中的match-mapping-group模式的方法?

时间:2018-08-21 09:50:16

标签: python-3.x functional-programming functional-dependencies functional-interface purely-functional

例如,我有一个列表,例如[2,4,7,7,9,6,12,38]。我想首先通过每个数字是否为奇数来识别它们,然后将100添加到每个奇数中,将101添加到每个偶数,最后得到两个列表。 共有3个步骤: 1.奇数或偶数匹配 2.给每个奇数和偶数添加一个适当的小数 3.分组到两个列表

在python中,可能需要3个最小功能,但是仍然应该如何通过使用函数式编程来达到目标​​?

1 个答案:

答案 0 :(得分:1)

步骤的顺序似乎是强制性的,并使函数式编程更加困难,因此,按照开放顺序,以下是Python实现:

odd = lambda x: x % 2 == 1
even = lambda x: not odd(x)
l = [2, 4, 7 ,9 ,36]
listodd = [i + 100 for i in l if odd(i)]
listeven = [i + 101 for i in l if no odd(i)]

因此,每个列表都是用一个表达式创建的,列表推导绝对是有效的函数式编程。表达列表理解的另一种方法是使用filter和map:

listodd = map(filter(l, odd), lambda x: x + 100)
listeven = map(filter(l, even), lambda x: x + 101)

代码仍然是高度冗余的,但是到目前为止,我还不知道如何编写更短,更简洁的代码。