我有两个包含浮点值的列表:
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的最佳组合并列出它们(首先显示可能的最低均值,然后显示最高的均值,然后像这样对它们进行排名)。我要做的是:
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和stdev。我尝试这样做:
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 ))))))
但是我一直收到此错误:
TypeError:“列表”和“浮动”实例之间不支持“ <”
是否有另一种方法可以根据另外2个方法对combination_fall_1列表进行排序?还是我错过了什么?
所需的输出:
[['CS105','MATH101','GER','GER'],['CS105','MATH101','ENG101','GER']]
由于['CS105','MATH101','GER','GER']
的平均值为3.419960107803423及其st.dev 0.2821718924791329,它是['CS105','MATH101','ENG101','GER']
的均值2.9687393162393163和st.dev 0.33945301919611576的更好组合
答案 0 :(得分:0)
将字符串,mean和stdev压缩在一起,然后问题就归结为sorting by one field descending (mean) and another ascending (stdev),而忽略了字符串,而在您只需要取出字符串之后即可。
这是一个简化的示例:
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']