如果我的平均值等于2,该怎么办?

时间:2019-05-30 11:17:38

标签: python python-2.7 indexing

我有一个学生名单和一些笔记,我必须找到每个学生的平均成绩,并按照以下方式向他们显示(如果平均成绩大于或等于6.0):

[学生姓名,平均值](按平均值的降序排列)。

我这样做了,但是问题是我有2个均值,并且我不能与该学生的姓名对应,在这两种情况下,他都将我的第一个学生的平均分为6.0。

我的列表如下:

info = [['Frank Morgan', '7.89', '3.19', '6.90', '9.90'], ['Jesse Lawrence', '6', '6', '6', '6'], ['Mark Porter', '9.00', '7.87', '9.12', '10.00'], ['Philip Sanchez', '6', '6', '6', '6']]

average= [6.970000000000001, 6.0, 8.9975, 6.0]

我要创建以下内容:

result = [['Frank Morgan', 6.970000000000001], ['Jesse Lawrence', 6.0],['Mark Porter', 8.9975], ['Philip Sanchez', 6.0]]

我尝试了以下方式:

result = []
for i in average:
    if i >= 6.0:
        result.append([info[average.index(i)][0], i])
print result

但是我得到了

result = [['Frank Morgan', 6.970000000000001], ['Jesse Lawrence', 6.0],['Mark Porter', 8.9975], ['Jesse Lawrence', 6.0]]

“杰西·劳伦斯”代替“菲利普·桑切斯”

请帮助我找到此匹配问题的另一种解决方案。

2 个答案:

答案 0 :(得分:0)

numpyitertools.groupby的帮助下,您可以这样做:

[[k, np.mean(np.array(list(g)[0][1:], dtype='float'))] for k, g in itertools.groupby(sorted(a, key=lambda x: x[0]), lambda x: x[0])]

并获得:

[['Frank Morgan', 6.970000000000001],
 ['Jesse Lawrence', 6.0],
 ['Mark Porter', 8.9975],
 ['Philip Sanchez', 6.0]]

答案 1 :(得分:0)

当您执行info[average.index(i)]时,average.index(i)将平均返回首次出现的i

您可以使用enumerate()

info = [['Frank Morgan', '7.89', '3.19', '6.90', '9.90'], ['Jesse Lawrence', '6', '6', '6', '6'], ['Mark Porter', '9.00', '7.87', '9.12', '10.00'], ['Philip Sanchez', '6', '6', '6', '6']]
average= [6.970000000000001, 6.0, 8.9975, 6.0]
for idx, value in enumerate(average):
    if value >= 6.0:
        result.append([info[idx])][0], value])
print result

甚至更好-使用zip()

info = [['Frank Morgan', '7.89', '3.19', '6.90', '9.90'], ['Jesse Lawrence', '6', '6', '6', '6'], ['Mark Porter', '9.00', '7.87', '9.12', '10.00'], ['Philip Sanchez', '6', '6', '6', '6']]
average= [6.970000000000001, 6.0, 8.9975, 6.0]
result = []
for student, value in zip(info, average):
    if value >= 6.0:
        result.append([student[0], value])

print result

作为旁注-开始使用python3