Python 声明性循环重构(需要访问多个元素)

我有这段代码,并试图重构它以声明性。但是AFAIK,所有声明式方法都会循环遍历容器的每个元素,而不是像这样的几个map()reduce()filter()


def arrayCheck(nums):


    # Note: iterate with length-2, so can use i+1 and i+2 in the loop

    for i in range(len(nums)-2):

        # Check in sets of 3 if we have 1,2,3 in a row

        if nums[i]==1 and nums[i+1]==2 and nums[i+2]==3:

            return True

    return False

那么如何编写这段代码,声明性的方式呢?


猛跑小猪
浏览 79回答 1
1回答

慕娘9325324

首先,您可以使用 a 来重写循环:zipdef array_check(nums):    for a, b, c in zip(nums, nums[1:], nums[2:]):        if a == 1 and b == 2 and c == 3:            return True    return False然后,使用元组比较:def array_check(nums):    for a, b, c in zip(nums, nums[1:], nums[2:]):        if (a, b, c) == (1, 2, 3):            return True    return False然后是内置的:anydef array_check(nums):    return any((a, b, c) == (1, 2, 3) for a, b, c in zip(nums, nums[1:], nums[2:]))测试:>>> array_check([1,3,4,1,2,3,5])True>>> array_check([1,3,4,1,3,5])False注意:有关更快的版本,请参阅下面的@juanpa.arrivillaga评论。如果你想模仿功能风格:import operator, functoolsdef array_check(nums):    return any(map(functools.partial(operator.eq, (1,2,3)), zip(nums, nums[1:], nums[2:])))但这真的很不合理!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python