为了账号安全,请及时绑定邮箱和手机立即绑定

如何从Python中的2个不同列表中计算中位数

如何从Python中的2个不同列表中计算中位数

holdtom 2022-09-20 17:49:31
我有两个列表注释 = [6,8,10,13,14,17] 有效 = [3,5,6,7,5,1],第一个代表成绩,第二个是班上的学生。所以3个孩子得到了6分,1个得到了17分。我想计算平均值和中位数。对于我得到的平均值:note = [6,8,10,13,14,17]  Effective = [3,5,6,7,5,1]  products = [] for num1, num2 in zip(note, Effective):    products.append(num1 * num2)  print(sum(products)/(sum(Effective)))我的第一个问题是,如何将两个列表都变成第三个列表:(6,6,6,8,8,8,8,8,10,10,10,10,10,10,13,13,13,13,13,13,13,14,14,14,14,14,17)以获得中位数。谢谢,唐卡
查看完整描述

6 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

要获得像你期望的第三个列表这样的输出,你必须做这样的事情:


from statistics import median

note = [6,8,10,13,14,17] 

Effective = [3,5,6,7,5,1] 


newList = []

for index,value in enumerate(Effective):

    for j in range(value):

        newList.append(note[index])



print(newList)

print("Median is {}".format(median(newList)))

输出:


[6, 6, 6, 8, 8, 8, 8, 8, 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 17]

Median is 10 


查看完整回答
反对 回复 2022-09-20
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

note = [6,8,10,13,14,17] 

effective = [3,5,6,7,5,1]

newlist=[]

for i in range(0,len(note)):

    for j in range(effective[i]):

        newlist.append(note[i])


print(newlist)


查看完整回答
反对 回复 2022-09-20
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

为了计算中位数,我建议你使用统计学。


from statistics import median


note = [6, 8, 10, 13, 14, 17]

effective = [3, 5, 6, 7, 5, 1]


total = [n for n, e in zip(note, effective) for _ in range(e)]

result = median(total)


print(result)

输出


10

如果你看一下(在上面的代码中),你有:total


[6, 6, 6, 8, 8, 8, 8, 8, 10, 10, 10, 10, 10, 10, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 17]

一个功能性的替代方法,使用重复:


from statistics import median

from itertools import repeat


note = [6, 8, 10, 13, 14, 17]

effective = [3, 5, 6, 7, 5, 1]


total = [v for vs in map(repeat, note, effective) for v in vs]

result = median(total)


print(result)


查看完整回答
反对 回复 2022-09-20
?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

下面是在内部级别上迭代的一种方法,以按照 中指定的次数复制每个方法,并使用 statistics.median 获取中位数:EffectivenumberEffective


from statistics import median


out = []

for i in range(len(note)):

    for _ in range(Effective[i]):

        out.append(note[i])

print(median(out))

# 10


查看完整回答
反对 回复 2022-09-20
?
动漫人物

TA贡献1815条经验 获得超10个赞

要获取列表,您可以执行如下操作


total = []

for grade, freq in zip(note, Effective):

    total += freq*[grade]


查看完整回答
反对 回复 2022-09-20
?
呼唤远方

TA贡献1856条经验 获得超11个赞

可以使用 np.repeat 获取包含新值的列表。

note = [6,8,10,13,14,17] 

Effective = [3,5,6,7,5,1] 


import numpy as np


new_list = np.repeat(note,Effective)

np.median(new_list),np.mean(new_list)


查看完整回答
反对 回复 2022-09-20
  • 6 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信