如何使用 lambda 代替 for 循环并仍然保持函数式编程?

问题描述 投票:0回答:1

这是原始代码

def cage_cats(S): 
    maxtemp = 0
    temp = list(set(S))
    for i in range(len(temp)-1):
        for j in range(len(S)-1):
            if temp[i] == S[j]:
                if S[j] == S[j+1]:
                    break
                else:
                    maxtemp = max(S[j], maxtemp)

    return maxtemp 

下面是我尝试使用不同方法复制上面代码的代码

def cage_cats(S):
    temp = list(set(S))
    maxtemp = max(
        list(
            map(
                lambda i : (
                    lambda j : (
                        S[j] if temp[i] == S[j] and S[j] == S[j+1] else "None"
                    ),range(len(S)-1)
                ),range(len(temp)-1)
            )
        )
    , 0)

我的代码哪里出错了?我有点迷失了该做什么。有没有一种方法可以使结果与原始代码相同,但仍保留其中的函数式编程部分?

编辑:这段代码是找到不相邻的最大元素。

例如:

[ 1, 1, 2, 2, 5, 3, 3, 5 ]
答案是5

[1, 2, 2, 3, 1, 5, 5, 3 ]
答案是3

[1, 1, 2, 2, 3, 3]
它将是 0(默认值)

输入将始终是偶数,因为我制作的函数不在本文中,并且所有数字将始终是一对

python functional-programming
1个回答
0
投票

这是仅使用

max
的解决方案。

它的工作原理是将列表中的所有元素与之前和之后的元素进行比较,并检查是否两者都不同

S = [1, 2, 2, 3, 1, 5, 5, 3]
S = ["", *S, ""] # pad with values that you're sure aren't in your list
max(b for a, b, c in zip(S, S[1:], S[2:]) if a != b != c) or 0 # 0 is default value
© www.soinside.com 2019 - 2024. All rights reserved.