Python 如何压缩这个函数?
我正在编写一个函数来平均一个元组中的三个元素,这意味着如果原始元组=(1,2,3),那么元组=(2,2,2) 我的问题是,有没有办法把我写的东西浓缩成同样的答案?如果是,如何浓缩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[
谢谢如果您确定需要整数除法,可以使用
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)