在第二个函数中调用一个布尔函数? - Python

时间:2017-02-21 03:40:06

标签: python function boolean

我目前在这里有一个工作职能:

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

2 个答案:

答案 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。