亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

試圖找到偶數和奇數列表的中位數,函數為兩者返回相同的答案

試圖找到偶數和奇數列表的中位數,函數為兩者返回相同的答案

偶然的你 2024-01-27 14:48:22
我正在嘗試找到偶數和奇數列表的中位數。這是一個很長的故事,但我必須以這種方式找到中位數(不導入任何東西)。當我傳入 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 answerEvenmedianForEvenList = medianCalculator(myEvenList)print(medianForEvenList)也許問題是我沒有正確返回答案?
查看完整描述

4 回答

?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

問題:

  • 您正在訪問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 answerEven


medianForEvenList = medianCalculator(myEvenList)

print(medianForEvenList)

medianForOddList = medianCalculator(myOddList)

print(medianForOddList)


查看完整回答
反對 回復 2024-01-27
?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

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))

# 3

print(median(myEvenList))

# 3.5


查看完整回答
反對 回復 2024-01-27
?
BIG陽

TA貢獻1859條經驗 獲得超6個贊

你得到 3 因為你忽略了myEvenList


n = len(myOddList)

if n % 2 != 0:  # always true

    answerOdd = myOddList[int(n/2)] 

    return answerOdd  # return 3

不要在函數中使用兩個列表,而只使用給定的參數


查看完整回答
反對 回復 2024-01-27
?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

首先你創建一個 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)


查看完整回答
反對 回復 2024-01-27
  • 4 回答
  • 0 關注
  • 208 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號