Dob*_*boy 2 python int reduce long-integer
我试图在包含int和long的列表上调用reduce.例如,
reduce( int.__mul__, [ 231212312412L, 3 ], 1 )
Run Code Online (Sandbox Code Playgroud)
但我得到一个未实现的错误.当我用long的mul方法替换int的mul方法时,它抱怨它正在获得一个int.我必须把它们全部映射到一个很长的位置吗?像这样.
reduce( long.__mul__, map( long, [ 12312412314L, 5 ] ), 1L )
Run Code Online (Sandbox Code Playgroud)
>>> from operator import mul
>>> reduce( mul, map( long, [ 12312412314L, 5 ] ), 1 )
61562061570L
>>> reduce( mul, [ 231212312412L, 3 ], 1 )
693636937236L
>>>
Run Code Online (Sandbox Code Playgroud)
运营商有:
'abs',
'add',
'and_',
'attrgetter',
'concat',
'contains',
'countOf',
'delitem',
'delslice',
'div',
'eq',
'floordiv',
'ge',
'getitem',
'getslice',
'gt',
'iadd',
'iand',
'iconcat',
'idiv',
'ifloordiv',
'ilshift',
'imod',
'imul',
'index',
'indexOf',
'inv',
'invert',
'ior',
'ipow',
'irepeat',
'irshift',
'isCallable',
'isMappingType',
'isNumberType',
'isSequenceType',
'is_',
'is_not',
'isub',
'itemgetter',
'itruediv',
'ixor',
'le',
'lshift',
'lt',
'methodcaller',
'mod',
'mul',
'ne',
'neg',
'not_',
'or_',
'pos',
'pow',
'repeat',
'rshift',
'sequenceIncludes',
'setitem',
'setslice',
'sub',
'truediv',
'truth',
'xor'
Run Code Online (Sandbox Code Playgroud)
int.__mul__只能乘两个整数,也就是long.__mul__两个长整数.但是普通的*操作符会自动为你处理不同的数值类型,所以你可以做的只是使用一个将工作传递给'*'的lambda:
reduce( lambda x,y: x*y, [ 231212312412L, 3 ], 1 )
Run Code Online (Sandbox Code Playgroud)
或是,使用operator.mul但请记住先导入它!(实际上这可能更快)