将列表中的数字相乘

时间:2015-11-19 10:44:56

标签: python python-3.x

假设我们有数字列表,只要产品是数字,我们希望将其中的所有数字相乘。

例如:

[2,2,5] => [4,5]

[3,3,7] => [9,7]

[5,5,5,5,5] => [5,5,5,5,5]

我可以在某处使用functools.reduce吗?什么是解决这个问题的pythonic方式?

3 个答案:

答案 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],[])