2013-02-04 41 views
1

當我製作一個簡單的計算器時,我會談到這一點。我做了一個簡單的程序來總結數字列表如下,但乘法程序有點長。如何編寫一個用最短行數乘以數字列表的程序?

因此,任何人都可以有任何想法如何使短程序在Python中的多個數字列表。這是我的代碼,看起來像。

def calculate(oper,*nm): 
    return oper(nm) 

add=lambda x:sum(x) 

def mult(lst): 
    tmp=1 
    for i in lst: 
     tmp*=i 
    return tmp 

計算(加,2,34,2)

計算(多重,8,5,7)

+0

你是什麼意思與「乘」?即:'[1,2,3] * 3 = [3,6,9]'? – DonCallisto

+0

你是從'numpy import *'做''嗎? –

+1

@DonCallisto我認爲他的意思是將所有排列在一起的元素排列在一起 –

回答

4

真的,你不需要定義calculate,因爲Python已經有一個名字:reduce

def calculate(oper, *nm): 
    return reduce(oper, nm) 

In [6]: import operator 

In [7]: calculate(operator.add, 2, 34, 2) 
Out[7]: 38 

In [8]: calculate(operator.mul, 8, 5, 7) 
Out[9]: 280 

注:在Python3,reduce已移至functools module。 (感謝@ErikRoper指出這一點。)

+1

真的很好的代碼,我之前沒有使用過運算符模塊。謝謝@unutbu – Tad

0

您可以使用內置reduce功能,這需要一個可調用的,一個列表和一個可選的起始元素。它使用元組(elem, result)調用callable,其中element是列表中的ith元素,result是迄今的結果。

reduce(lambda item,prod: item * prod, range(1, 5), 1) 
Out[2]: 24 

所以上面會首先調用lambda函數與(1,1),然後用(2,1*1)然後(3,2*1)最後(4,3*2)

所以,你會定義addmult,並與內置的更換你的calculate減少

add = lambda item,cumul_sum: item + cumul_sum 
mult = lambda item,product: item * product 
reduce(add, range(1,5), 0) 
Out[5]: 10 
reduce(mult, range(1,5), 1) 
Out[6]: 24 

http://docs.python.org/2.7/library/functions.html?highlight=reduce#reduce

相關問題