我想调用一个包含在python中包含long的内容的列表

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)

rob*_*ing 7

>>> 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)


mic*_*slm 5

int.__mul__只能乘两个整数,也就是long.__mul__两个长整数.但是普通的*操作符会自动为你处理不同的数值类型,所以你可以做的只是使用一个将工作传递给'*'的lambda:

reduce( lambda x,y: x*y, [ 231212312412L, 3 ], 1 )
Run Code Online (Sandbox Code Playgroud)

或是,使用operator.mul但请记住先导入它!(实际上这可能更快)