【问题标题】:What can I do if I have 2 equal average?如果我有 2 个相等的平均值,我该怎么办?
【发布时间】:2019-10-16 01:13:49
【问题描述】:

我有一个学生名单和一些笔记,我必须找到每个学生的平均成绩,并以如下方式显示(如果平均数大于或等于 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]]

“杰西·劳伦斯”而不是“菲利普·桑切斯”

请帮我为这个匹配问题找到另一个解决方案。

【问题讨论】:

    标签: python python-2.7 indexing


    【解决方案1】:

    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]]
    

    【讨论】:

    • 很遗憾,我无法使用 numpy
    【解决方案2】:

    当您执行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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      • 2022-07-25
      • 2016-08-06
      • 1970-01-01
      • 2016-01-20
      • 1970-01-01
      • 2014-03-07
      相关资源
      最近更新 更多