如何压缩这个功能?

时间:2011-03-10 17:18:30

标签: python

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

我正在写一个函数来平均一个元组中的三个元素,这意味着如果原始元组=(1,2,3)给我元组=(2,2,2)

我的问题是,是否有任何方法可以压缩所写的内容给我相同的答案?如果是的话,如何压缩它?

由于

5 个答案:

答案 0 :(得分:5)

如果您确定要进行整数除法,可以使用

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

答案 1 :(得分: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在功能上与我的相同。

答案 2 :(得分: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)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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