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'.
有谁知道这里有什么问题?
你似乎对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表达式,x是str[0]和y是str[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)
| 归档时间: |
|
| 查看次数: |
2059 次 |
| 最近记录: |