我试图在包含整数和长整数的列表上调用 reduce。例如,
reduce( int.__mul__, [ 231212312412L, 3 ], 1 )
但我得到一个未实现的错误。当我用 long 的 mul 方法替换 int 的 mul 方法时,它抱怨它正在获取一个 int。我必须先将它们全部映射到 long 吗?像这样。
reduce( long.__mul__, map( long, [ 12312412314L, 5 ] ), 1L )
我试图在包含整数和长整数的列表上调用 reduce。例如,
reduce( int.__mul__, [ 231212312412L, 3 ], 1 )
但我得到一个未实现的错误。当我用 long 的 mul 方法替换 int 的 mul 方法时,它抱怨它正在获取一个 int。我必须先将它们全部映射到 long 吗?像这样。
reduce( long.__mul__, map( long, [ 12312412314L, 5 ] ), 1L )
>>> from operator import mul
>>> reduce( mul, map( long, [ 12312412314L, 5 ] ), 1 )
61562061570L
>>> reduce( mul, [ 231212312412L, 3 ], 1 )
693636937236L
>>>
运营商有:
'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'
int.__mul__
只能将两个整数相乘,同样,long.__mul__
两个长整数。但是普通*
运算符会自动为您处理不同的数字类型,所以您可以简单地使用一个将工作传递给 '*' 的 lambda:
reduce( lambda x,y: x*y, [ 231212312412L, 3 ], 1 )
或者是的,使用operator.mul
但记得先导入它!(实际上,这可能会更快)
你想要operator.mul
。
你不需要那么花哨reduce
。
total = 1
for x in your_list:
total *= x
这更具可读性和更快