Python if else 语句在 reduce lambda 函数中不起作用
Python if else statement not working in reduce lambda function
我是 Python 中 lambda
和 reduce
的新手,我不明白为什么这个功能不起作用:
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'
我预计输出为 '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'
注意这里的错误:在第一次调用 lambda 表达式时,x
是 str[0]
,而 y
是 str[1]
。因此,如果传入字符串中的第一个字符是一个符号,则不会对其进行翻译。
print my_func('-foo_bar-baz')
-foo bar baz
这可以通过向 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'
我是 Python 中 lambda
和 reduce
的新手,我不明白为什么这个功能不起作用:
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'
我预计输出为 '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'
注意这里的错误:在第一次调用 lambda 表达式时,x
是 str[0]
,而 y
是 str[1]
。因此,如果传入字符串中的第一个字符是一个符号,则不会对其进行翻译。
print my_func('-foo_bar-baz')
-foo bar baz
这可以通过向 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'