Python 使用函数式编程风格查找两个排序数组的相同元素计数

Python 使用函数式编程风格查找两个排序数组的相同元素计数,python,functional-programming,Python,Functional Programming,例如: 给定nums1=[1,2,3,4],nums2=[2,3],返回2 我有使用python的命令式解决方案,算法复杂度为Om+n: def sameElementsCount(nums1, nums2): count = 0 len1 = len(nums1) len2 = len(nums2) i = 0 j = 0 while i < len1 and j < len2: if nums1[i] == nums

例如: 给定nums1=[1,2,3,4],nums2=[2,3],返回2

我有使用python的命令式解决方案,算法复杂度为Om+n:

def sameElementsCount(nums1, nums2):
    count = 0
    len1 = len(nums1)
    len2 = len(nums2)
    i = 0
    j = 0
    while i < len1 and j < len2:
        if nums1[i] == nums2[j]:
            count += 1
            i += 1
            j += 1
        elif nums1[i] < nums2[j]:
            i += 1
        else:
            j += 1
    return count

print sameElementsCount([1,2,3,4], [2,3])
如何使用高阶函数(如map/filter/reduce)进行函数编程。确保
算法复杂度为Om+n

你可以使用集合交集:lensetnum1和setnum2

在一些文章中给出的答案lensetnum1和setnum2写起来很快,但它在只需要其基数时计算实际的集合交集。此外,它没有强调函数式编程风格的任何使用

以下行为与您的程序完全相同,但具有函数式编程风格: while循环被转换成一个递归函数,计数器被分解,以允许在列表上进行模式匹配

def sameElementsCount(nums1, nums2):
    len1 = len(nums1)
    len2 = len(nums2)
    if len1 == 0 or len2 == 0:
        return 0
    elif nums1[0] == nums2[0]:
        return 1+sameElementsCount(nums1[1:],nums2[1:])
    elif nums1[0] < nums2[0]:
        return sameElementsCount(nums1[1:],nums2)
    else:
        return sameElementsCount(nums1,nums2[1:])

print sameElementsCount([1,2,3,4], [2,3])

我不确定哪些高阶函数适合您的方法,但正如python的zen所说,简单比复杂好,您可以尝试使用lensetnums1和SetNums2,这是两个列表的隐含要求吗?