Python if else语句不能用于reduce lambda函数

Rot*_*eti -2 python reduce lambda

我是新来的lambda,并reduce在Python,我不明白为什么这个功能不工作:

def my_func(str):
    symbols = ['_', '-']
    return reduce(lambda x, y: ' ' + y if x in symbols else x + y, str)

my_func('foo_bar-baz')  # 'foo_bar-baz'
Run Code Online (Sandbox Code Playgroud)

我期待输出'foo bar baz'.

有谁知道这里有什么问题?

Rob*_*obᵩ 7

你似乎对reduce函数参数的参数顺序感到困惑.第一个参数是运行总计,第二个参数是新数据.在您的示例中,x是组合字符串,y是新字符.

试试这个:

def my_func(str):
    symbols = ['_', '-']
    return reduce(lambda x, y: x + (' ' if y in symbols else y), str)

print my_func('foo_bar-baz')  # 'foo bar baz'
Run Code Online (Sandbox Code Playgroud)

注意在此错误:在第一次调用lambda表达式,xstr[0]ystr[1].因此,如果传入字符串中的第一个字符是符号,则不进行转换.

print my_func('-foo_bar-baz')
-foo bar baz
Run Code Online (Sandbox Code Playgroud)

这可以通过提供第三个参数来解决reduce():

def my_func(str):
    symbols = ['_', '-']
    return reduce(lambda x, y: x + (' ' if y in symbols else y), str, '')

print my_func('foo_bar-baz')  # 'foo bar baz'
print my_func('-foo_bar-baz')  # ' foo bar baz'
Run Code Online (Sandbox Code Playgroud)

  • 您可能希望使用`''作为启动器(第三个参数),在字符串的开头处理`_`或`-`. (3认同)