繁体   English   中英

用于替换字符串中字符的 Lambda 函数

[英]Lambda function for replacing characters in the string

下面是替换字符的 Python 代码。 有人可以解释 lambda 部分吗? 最初,X 取“p”并检查它是 a1 还是 a2。 交换在哪里发生?


def replaceUsingMapAndLambda(sent, a1, a2):
    # We create a lambda that only works if we input a1 or a2 and swaps them.
    newSent = map(lambda x: x if(x != a1 and x != a2) else a1 if x == a2 else a2, sent)
    print(newSent)
    return ''.join(newSent)


print(replaceUsingMapAndLambda("puporials toinp", "p", "t"))

输出:

$python main.py
['t', 'u', 't', 'o', 'r', 'i', 'a', 'l', 's', ' ', 'p', 'o', 'i', 'n', 't']
tutorials point 

谢谢,瑞思卡

这与:

def replaceUsingMapAndLambda(sent, a1, a2):
    # We create a lambda that only works if we input a1 or a2 and swaps them.
    newSent = []
    for x in sent:
        if x != a1 and x != a2:
            newSent.append(x)
        elif x == a2:
            newSent.append(a1)
        else:
            newSent.append(a2) 

    print(newSent)
    return ''.join(newSent)

Lambda是创建匿名函数的关键字, map将此匿名函数应用于列表的每个元素并返回结果。

为避免混淆,让我们首先提取 lambda 函数并查看它的作用。 lambda 函数定义为

lambda x: x if(x != a1 and x != a2) else a1 if x == a2 else a2

lambda 语句避免了创建命名函数的定义,但是任何 lambda 函数仍然可以定义为普通函数。 这个特定的 lambda 函数使用了一个三元运算符 这可以扩展为常规的 if-else 语句。 这将导致类似这样的等效正则函数

def func(x, a1, a2):
    if x != a1 and x != a2:
        return x
    elif x == a2:
        return a1
    else:
        return a2

它需要字符串(或列表),在这种情况下是: "puporials toinp"

然后它遍历字符串/列表中的每个字符/项目并检查以下内容:(我会为你打破 lambda 代码)

lambda x: x if(x != a1 and x != a2) else a1 if x == a2 else a2

1) 如果字符/项目不等于 a1 且不等于 a2,则将其映射到它检查的相同字符。

这是这段代码: x if(x != a1 and x != a2)

别的

2) 如果字符等于 a2,则映射 a1 的值,否则映射 a2。

这是这段代码: else a1 if x == a2 else a2

然后 newSent 是一个包含字符的映射对象(具有上面解释的逻辑),并使用''.join(newSent)命令将其转换回字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM