我正在尝试在包含整数字符串的列表上使用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?我想我可以给我们另一个循环,但我仍然想知道传递字符串有什么不对.
>>> 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)
| 归档时间: |
|
| 查看次数: |
2108 次 |
| 最近记录: |