Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何压缩这个函数?_Python - Fatal编程技术网

Python 如何压缩这个函数?

Python 如何压缩这个函数?,python,Python,我正在编写一个函数来平均一个元组中的三个元素,这意味着如果原始元组=(1,2,3),那么元组=(2,2,2) 我的问题是,有没有办法把我写的东西浓缩成同样的答案?如果是,如何浓缩 谢谢如果您确定需要整数除法,可以使用 def average(tup): """ ugiufh """ total = ((int(tup[0]) + int(tup[1]) + int(tup[2]))/3, (int(tup[0]) + int(tup[1]) + int(tup[

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

我的问题是,有没有办法把我写的东西浓缩成同样的答案?如果是,如何浓缩


谢谢

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

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
一行:

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


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

有一些方法可以压缩您列出的代码,但您真正应该努力的是使代码更具可读性

average = lambda tup: ((lambda t: sum(t, .0) / len(t))(tup),) * len(tup)
def average(tup):
    return (sum(tup) / len(tup),) * len(tup)
这样做的另一个好处是能够接受任何输入长度的元组

在这个版本的代码中所做的一个更改是,元组的元素不会首先强制为整数。除非有什么特殊的原因需要这样做,否则您可能应该将该逻辑分离为单独的代码位

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

当然,如果你坚持要一个简洁的答案,它在功能上与我的答案相同。

删除
“ugiufh”
-小一行。:)您确定要在此处进行整数除法吗?只是一个问题。不要删除它,而是在docstring中描述函数出于好奇,为什么不一直使用它来
return(sum(int(x)for x in tup)/len(tup))*n
?@James:因为你的代码(a)没有定义
n
,并且(b)没有返回元组。我不明白为什么你不能只接受
return(sum(tup)/len(tup),)*len(tup)
如我的答案所示。。。为什么是生成器?@本杰明:因为我想重现OP函数的行为。你的函数做了一些其他的事情,这可能是OP想要的,但不是她要求的。@Sven:我看不出我的解决方案与OP的代码或你的代码有什么不同?在Python 2.x中,如果传入的元组只包含整数,那么这个版本将使用整数除法,但只要包含一个浮点,它将计算实际平均值。OP的版本(和我的版本)总是使用整数除法。最合理的版本可能是始终使用浮点除法。
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)
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)
def average(tup):
    """ ugiufh """
    el = sum( map(int,tup) )/3
    return (el,el,el)