试图找到偶数和奇数列表的中位数,函数为两者返回相同的答案

我正在尝试找到偶数和奇数列表的中位数。这是一个很长的故事,但我必须以这种方式找到中位数(不导入任何东西)。


当我传入 myOddList 作为参数时,中位数是 3(正确)。然而,当我传入 myEvenList 作为参数时,我再次得到 3。如何让 myEvenList 正常工作并输出 3.5?


myOddList = [1, 2, 3, 4, 5]

myEvenList = [1, 2, 3, 4, 5, 6]


def medianCalculator(myEvenList):

    myOddList.sort()

    myEvenList.sort()

    n = len(myOddList)

    s = len(myEvenList)

    if n % 2 != 0:

        answerOdd = myOddList[int(n/2)]

        return answerOdd

    else:

        one = myEvenList [(s-1) // 2]

        two = myEvenList [(s+1) // 2]

        answerEven = (one + two) / 2

        return answerEven


medianForEvenList = medianCalculator(myEvenList)

print(medianForEvenList)

也许问题是我没有正确返回答案?


偶然的你
浏览 99回答 4
4回答

FFIVE

问题:您正在访问myEvenListand myOddListinside medianCalculator,但您不应该这样做。medianCalculator应与任何外部变量分离。参数myEvenList隐藏myEvenList全局变量您决定运行偶数还是奇数算法取决于n,它是根据 计算的myOddList,因此它始终只运行两侧之一。不要调用sort()参数,因为它会修改底层列表。先复印一份。解决方案:让你的medianCalculator函数没有副作用。这意味着,它不应该访问其自身函数之外的任何变量,而只能对其输入参数进行操作。medianCalculator如果您想获得多个答案,请多次致电。使用不同的参数让它在不同的输入上运行。代码:myOddList = [1, 2, 3, 4, 5]myEvenList = [1, 2, 3, 4, 5, 6]def medianCalculator(myList):    myList = myList.copy()    myList.sort()    n = len(myList)    if n % 2 != 0:        answerOdd = myList[int(n/2)]        return answerOdd    else:        one = myList [(n-1) // 2]        two = myList [(n+1) // 2]        answerEven = (one + two) / 2        return answerEvenmedianForEvenList = medianCalculator(myEvenList)print(medianForEvenList)medianForOddList = medianCalculator(myOddList)print(medianForOddList)

慕容708150

myOddList = [1, 2, 3, 4, 5]myEvenList = [1, 2, 3, 4, 5, 6]def median(lst):        lst = sorted(lst)        lst_length = len(lst)    midpoint = lst_length/2        if lst_length % 2 != 0:        return lst[int(midpoint-0.5)]    else:        return (lst[int(midpoint-0.5)] + lst[int(midpoint+0.5)])/2    print(median(myOddList))# 3print(median(myEvenList))# 3.5

BIG阳

你得到 3 因为你忽略了myEvenListn = len(myOddList)if n % 2 != 0:  # always true    answerOdd = myOddList[int(n/2)]     return answerOdd  # return 3不要在函数中使用两个列表,而只使用给定的参数

缥缈止盈

首先你创建一个 def,所以不要在那里创建你的列表,其次你应该定义一个 def 参数,因为你稍后想要使用。def median_cal (my_list) :     my_list.sort()    n = len(my_list)    if n % 2 != 0 :        x = int(n/2)         answer = my_list[x]        print (answer)    else :         x = int(n/2) - 1         y = int(n/2)          answer = my_list[x] + my_list[y]        print (answer/2)a = [1,2,3]b = [1,2,3,4]median_cal(a)median_cal(b)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python