2011-03-10 61 views
3
def average(tup): 
    """ ugiufh """ 
    total = ((int(tup[0]) + int(tup[1]) + int(tup[2]))/3, 
      (int(tup[0]) + int(tup[1]) + int(tup[2]))/3, 
      (int(tup[0]) + int(tup[1]) + int(tup[2]))/3) 
    return total 

我写一个函数来平均3种元素中的元组,这意味着如果原始元组=(1,2,3),其给我元组=(2,2,2)如何浓缩此功能?

我的问题有没有什么办法来压缩写给我的答案?如果是,如何浓缩它?

感谢

+8

删除'“”“ugiufh”“”'' - 一行较小。 :) – James 2011-03-10 17:19:48

+0

你确定你想在这里做整数除法吗?就一个问题。 – 2011-03-10 17:25:47

+1

不要删除它,而是在文档字符串中描述函数 – joaquin 2011-03-10 17:25:55

回答

5

如果你确定要整数除法,你可以使用

def average(tup): 
    n = len(tup) 
    return (sum(int(x) for x in tup)/n,) * n 
+0

出于好奇,为什么不能一路走下去并使其返回(sum(int(x)for x in tup)/ len(tup))* n' ? – James 2011-03-10 17:24:39

+0

@James:因为你的代码(a)没有定义'n',并且(b)不返回一个元组。 – 2011-03-10 17:26:13

+0

@Sven:呃,对。需要更多的咖啡。 +1。 – James 2011-03-10 17:27:37

0
def average(tup): 
    def mean(t): 
     return sum(t, .0)/len(t) 
    return (mean(tup),) * len(tup) 

一号线:

def average(tup): return ((lambda t: sum(t, .0)/len(t))(tup),) * len(tup) 

average = lambda tup: ((lambda t: sum(t, .0)/len(t))(tup),) * len(tup) 

但是第一块代码比这些更好。

0
def average(tup): 
    return (sum(tup)/len(tup),) * len(tup) 
1

有几种方法可以压缩列出的代码,但您真正应该努力的是让代码更具可读性。

def average(a): 
    """Return a tuple where every element of ``a`` is replaced by the average of the values of ``a``.""" 
    length = len(a) 
    average = sum(a)/length 
    return (average,) * length # A 1-tuple containing the average, repeated length times 

这有附加的好处是能够接受任何输入长度的元组。

在这个版本的代码中做出的一个改变是元组的元素不是先被强制转换为整数。除非有一些专门的理由,否则你应该将这些逻辑分离出来,放在一段代码中。

data = (1, '2', 3.0) 
normalised_data = (int(x) for x in data) # A generator expression that yields integer-coerced elements of data 
result = average(normalised_data) 

当然,如果你坚持一个浓缩的回答,Sven's answer的功能等同于我的。

+0

在Python 2.x中,如果传入的元组仅包含整数,则此版本将使用整数除法,但只要包含一个浮点数,它将计算实际平均值。 OP的版本(和我的)总是使用整数除法。可能最为理智的版本可能是始终使用浮点除法。 – 2011-03-10 18:58:01

+0

你是完全正确的。谢谢你的澄清,斯文。 – Wesley 2011-03-10 19:10:39

0
def average(tup): 
    """ ugiufh """ 
    el = sum(map(int,tup))/3 
    return (el,el,el)