假设我们有数字列表,只要产品是数字,我们希望将其中的所有数字相乘。
例如:
[2,2,5] => [4,5]
[3,3,7] => [9,7]
[5,5,5,5,5] => [5,5,5,5,5]
我可以在某处使用functools.reduce
吗?什么是解决这个问题的pythonic方式?
答案 0 :(得分:5)
这可以通过简单的有状态算法轻松解决:
def multiply_digits(lst):
res = []
for x in lst:
if res and res[-1] * x < 10:
res[-1] *= x
else:
res.append(x)
return res
虽然存在等效的功能方式(使用reduce
),但这并不是那么简单,因为您需要在每个步骤中重新组合结果列表,或者单独携带当前数字值。
答案 1 :(得分:1)
这可能会起到作用:
def process(lst):
lst = sorted(lst)
last = 1
result = []
for el in lst:
if last * el >= 10:
result.append(last)
last = el
continue
last *= el
result.append(last)
return result
答案 2 :(得分:1)
我想这更好:
from numpy import product
reduce(lambda x , y : (x[0:-1]+[y*x[-1]] if product(x+[y])<10 else x+[y]) if len(x)>0 else [y] ,[21,1,2,3,4,5,6],[])