Lambda function for replacing characters in the string
下面是用于替换字符的python代码。有人能解释一下lambda部分吗?最初,x取"p",检查a1或a2。交换发生在哪里?
1 2 3 4 5 6 7 8 | 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")) |
输出:
1 2 3 | $python main.py ['t', 'u', 't', 'o', 'r', 'i', 'a', 'l', 's', ' ', 'p', 'o', 'i', 'n', 't'] tutorials point |
谢谢,雷塞卡
为了避免混淆,让我们先提取lambda函数,看看它做了什么。lambda函数定义为
1 | lambda x: x if(x != a1 and x != a2) else a1 if x == a2 else a2 |
lambda语句避免了创建命名函数的定义,但是任何lambda函数仍然可以定义为普通函数。此特定lambda函数使用三元运算符。这可以扩展为常规if-else语句。这将导致类似这样的等价正则函数
1 2 3 4 5 6 7 | def func(x, a1, a2): if x != a1 and x != a2: return x elif x == a2: return a1 else: return a2 |
这与以下内容相同:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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代码)
1 | lambda x: x if(x != a1 and x != a2) else a1 if x == a2 else a2 |
1)如果char/item不等于a1且不等于a2,则将其映射到选中的相同字符。
这是什么代码:
否则
2)如果字符等于a2,则映射a1的值;如果不等于a2,则映射a2。
这是什么代码:
然后newsent是一个map对象,其中包含chars(上面解释的逻辑),并使用