下面是替换字符的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
谢谢, 瑞西卡
答案 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)
答案 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)
命令将其转换回字符串。