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

时间:2018-09-26 09:01:51

标签: python python-2.7

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

谢谢, 瑞西卡

3 个答案:

答案 0 :(得分:1)

这与:

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

答案 1 :(得分:1)

为避免混淆,让我们首先提取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语句。这将导致类似这样的常规函数​​

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

答案 2 :(得分:0)

它采用字符串(或列表),在这种情况下为:"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是一个映射对象,其中包含字符(具有上述逻辑),并使用''.join(newSent)命令将其转换回字符串。