gpt4 book ai didi

python - 中位数代码解释

转载 作者:太空狗 更新时间:2023-10-29 22:03:48 31 4
gpt4 key购买 nike

我的教授写了这个中值函数,我不是很理解。有人可以解释关于 i = len(list)/2median = avg()else 语句的部分吗?

def avg_list(numbers):  
sum = 0
for num in numbers:
sum += num

avg = float(sum)/len(numbers)
print avg

def median(list):
list.sort()
if len(list)%2 == 0:
#have to take avg of middle two
i = len(list)/2
median = avg()
else:
#find the middle (remembering that lists start at 0)
i = len(list)/2
median = list
return median

从我看到的一个例子中添加,对于偶数列表长度:

def median(s):
i = len(s)
if not i%2:
return (s[(i/2)-1]+s[i/2])/2.0
return s[i/2]

这很好用,但我不明白最后一个 return s[i/2]?

对于奇数列表长度:

x = [1,2,5,2,3,763,234,23,1,234,21,3,2134,23,54]
median = sorted(x)[len(x)/2]

由于 x 的列表长度为奇数,[len(x)/2] 不是一个 float 索引吗?我不是一直都明白吗?非常感谢任何比我更好的解释。

最佳答案

为什么这是非常错误的,逐行:

def median(list):              # 1

list.sort() # 2

if len(list)%2 == 0:
#have to take avg of middle two
i = len(list)/2 # 3
median = avg() # 4
else:
#find the middle (remembering that lists start at 0)
i = len(list)/2 # 5
median = list # 6

return median

#1:给变量取与数据类型相同的名称是个坏主意,即 list

#2:list.sort() 将修改正在传递的列表。人们会期望像 median() 这样的 getter 不会那样做。

#4 它调用一个没有参数的函数 avg(),这是完全没有意义的,即使定义了这样一个函数。

#3#5 的计算方式相同,与采用的 if 分支无关。无论如何,从未使用过 i

#6 它将 median 设置为原始 list,这是零意义。


以下是我将如何重写(同时保持清晰):

def median(alist):

srtd = sorted(alist) # returns a sorted copy
mid = len(alist)/2 # remember that integer division truncates

if len(alist) % 2 == 0: # take the avg of middle two
return (srtd[mid-1] + srtd[mid]) / 2.0
else:
return srtd[mid]

此外,avg_list() 函数(在 median() 中未使用也不能使用)可以重写为:

def avg_list(numbers):  
return float(sum(numbers))/len(numbers)

sum()是一个返回可迭代对象中所有元素总和的函数。

关于python - 中位数代码解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7578689/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com