繁体   English   中英

如何根据 2 个其他列表的排序方式对 1 个列表进行排序?

[英]How to sort 1 list based on how 2 other lists were sorted?

我有两个包含浮点值的列表:

mean_fall_1 = [statistics.mean(d) for d in fall_1_gpa]
stdev_fall_1 = [statistics.stdev(d) for d in fall_1_gpa]

在哪里:

fall_1_gpa = [[mean(sub_list) for sub_list in list] for list in fall1_grades]

此外,我有一个字符串列表:

combination_fall_1 = [['CS105','MATH101','ENG101','GER'],['CS105','MATH101','GER','GER']]
fall1_grades = [[[4.0, 3.33, 3.33, 4.0], [4.0, 3.33, 3.33, 4.0], [4.0, 3.33, 3.33, 4.0], [4.0, 3.33, 3.33, 4.0], [4.0, 3.33, 3.33, 4.0], [4.0, 3.33, 3.33, 4.0], [4.0, 3.33, 3.33, 4.0], [4.0, 3.33, 3.33, 4.0]],[[4.0, 3.33, 3.33, 4.0], [4.0, 3.33, 3.33, 4.0], [4.0, 3.33, 3.33, 4.0], [4.0, 3.33, 3.33, 4.0], [4.0, 3.33, 3.33, 4.0], [4.0, 3.33, 3.33, 4.0], [4.0, 3.33, 3.33, 4.0], [4.0, 3.33, 3.33, 4.0], [4.0, 3.33, 3.33, 4.0], [4.0, 3.33, 3.33, 4.0], [4.0, 3.33, 3.33, 4.0], [4.0, 3.33, 3.33, 4.0], [4.0, 3.33, 3.33, 4.0]]]
mean_fall_1 = [2.9687393162393163,3.419960107803423]
stdev_fall_1 = [0.33945301919611576,0.2821718924791329]

我想做的是找到 mean_fall_1 和 stdev_fall_1 的最佳组合并列出它们(首先显示可能的最高均值和最低的 stdev 并像这样对它们进行排名)。 我所做的是:

mean_fall_1, stdev_fall_1 = sorted(
        list(zip(*(zip(mean_fall_1, stdev_fall_1)))))
    mean_fall_1, stdev_fall_1 = (list(t) for t in sorted(list(zip(*(zip(mean_fall_1, stdev_fall_1))))))

当我打印(stdev 然后是意思)时,我得到了这个结果:

[0.2821718924791329, 0.33945301919611576]
[3.419960107803423, 2.9687393162393163]

但我希望 combination_fall_1 列表与此相应地排序,以便我能够向用户显示课程的组合,而不仅仅是均值和标准差。 我试过这样做:

mean_fall_1, stdev_fall_1,combination_fall_1  = sorted(
            list(zip(*(zip(mean_fall_1, stdev_fall_1,combination_fall_1 )))))
        mean_fall_1, stdev_fall_1 = (list(t) for t in sorted(list(zip(*(zip(mean_fall_1, stdev_fall_1,combination_fall_1 ))))))

但我不断收到此错误:

类型错误:“列表”和“浮动”实例之间不支持“<”

还有另一种方法可以根据其他 2 对 combination_fall_1 列表进行排序吗? 还是我错过了什么?

所需的 output:

[['CS105','MATH101','GER','GER'],['CS105','MATH101','ENG101','GER']]

由于['CS105','MATH101','GER','GER']的平均值为 3.419960107803423,其 st.dev 为 0.2821718924791329,这是['CS105','MATH101','ENG101','GER']更好组合['CS105','MATH101','ENG101','GER']均值 2.9687393162393163 和 st.dev 0.33945301919611576

Zip 你的字符串,均值和标准偏差一起,然后问题归结为按一个字段降序(均值)和另一个升序(标准偏差)排序,同时忽略字符串,然后你只需要将字符串取回。

这是一个简化的例子:

names = ['a', 'b']
mean = [2.96, 3.41]
stdev = [0.33, 0.28]

groups = list(zip(names, mean, stdev))
groups.sort(key=lambda x: (-x[1], x[2]))
# [('b', 3.41, 0.28), ('a', 2.96, 0.33)]

print([x[0] for x in groups])
# -> ['b', 'a']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM