尝试将reduce()和lambda与包含字符串的列表一起使用

Jus*_*gli 4 python lambda

我正在尝试在包含整数字符串的列表上使用pythons reduce函数.

print int("4")
\\Gives me 4 Good
print reduce(lambda x,  y: x*y,  [2, 3, 4])
\\Gives me 24 Good
print reduce(lambda x,  y: x*int(y),  ['2',  '3',  '4'])
\\Gives me 222222222222 What??
Run Code Online (Sandbox Code Playgroud)

我假设reduce给lambda函数一些不是列表中实际字符串的东西?我不知道为什么我至少得到222222222222,是否有一个简单的方法使列表成为一个int?我想我可以给我们另一个循环,但我仍然想知道传递字符串有什么不对.

pok*_*oke 7

>>> reduce(lambda x,  y: x*int(y),  ['2',  '3',  '4'])
'222222222222'
Run Code Online (Sandbox Code Playgroud)

好的,这是发生的事情:

在第一个减少步骤中,完成以下计算:'2' * 3.由于第一个操作数是一个字符串,它只是重复3次数.所以你最终得到了'222'.

在第二个减少步骤中,该值乘以4 : '222' * 4. 再一次,字符串重复四次,'222222222222'这导致了你得到的结果.

您可以通过转换x为int(调用int(x))或通过首先使用整数转换映射列表元素来避免这种情况(我实际上认为更优雅):

>>> reduce(lambda x, y: x * y, map(int, ['2', '3', '4']))
24
Run Code Online (Sandbox Code Playgroud)