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

2024-06-29 00:54:10 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是替换字符的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"))

输出:

^{pr2}$

谢谢, 里希卡


Tags: andlambda代码a2ifdefa1create
3条回答

它接受字符串(或列表),在本例中是:"puporials toinp"

然后它遍历字符串/列表中的每个字符/项,并检查以下内容:(我将为您断开lambda代码)

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

1)如果char/item不等于a1也不等于a2,则将其映射到所检查的同一个字符。在

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

其他

2)如果字符等于a2,则映射a1的值;如果不是,则映射a2。在

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

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

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

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

但是,lambda函数仍然可以避免定义为lambda函数的任何定义。此特定lambda函数使用ternary operator。这可以扩展为常规if-else语句。这将导致一个类似这样的正则函数

^{pr2}$

这与:

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将此匿名函数应用于列表的每个元素并返回结果。在

相关问题 更多 >