我目前在这里有一个工作职能:
def median(alist):
copylist = alist[:]
copylist.sort()
if len(copylist)%2 == 0:
rightmid = len(copylist)//2
leftmid = rightmid - 1
median = (copylist[leftmid] + copylist[rightmid])//2
else:
mid = len(copylist)//2
median = copylist[mid]
return median
我希望这个函数在第一个函数中调用第二个函数isEven。这是第二个功能:
def isEven(n):
if n % 2 == 0:
return True
else:
return False
这是正确的方法吗?还是有另一种方法来缩短中位函数中的代码?
def median(alist):
copylist = alist[:]
copylist.sort()
if isEven(len(alist)) == True:
rightmid = len(copylist)//2
leftmid = rightmid - 1
median = (copylist[leftmid] + copylist[rightmid])//2
else:
mid = len(copylist)//2
median = copylist[mid]
return median
答案 0 :(得分:0)
尝试这样的事情应该会在中位数上缩短代码量,即使不需要辅助方法isEven
:
def median(alist):
copylist = sorted(alist)
index = (len(alist) - 1) // 2
if len(alist) % 2:
return copylist[index]
else:
return (copylist[index] + copylist[index + 1]) / 2.0
# Testing
print(median([3,1,2])) #2
print(median([4,2,3,1])) #2.5
试试here!
答案 1 :(得分:0)
您的问题已经得到解答,但如果您有兴趣,我会添加以下可读性增强功能:
我会更改您的isEven
函数以获得以下签名:
def hasEvenNumberOfMembers(list):
if len(list) % 2 == 0:
return True
else:
return False
然后将if
中的median
语句更改为:
if hasEvenNumberOfMembers(alist):
我认为这使得事情更具可读性。只是我的2c。