创建多个列表,放入另一个列表中,然后排序

时间:2018-10-28 06:37:11

标签: python list sorting

我需要能够:

  • 定义一个接受两个参数的函数。创建两个列表,一个 带有名称,另一个带有等级。
  • 将这两个列表中的数据与等级一起放入第三个列表中 对应于第一个列表中相同位置的名称。即: 具有相同的索引值。
  • 然后,我需要能够按降序对该列表进行排序 成绩。

这是我到目前为止所拥有的:

def gradeAvg(lst1,lst2):
    lst1 = ["Jo", "Ji", "Ja"]
    lst2 = [[90],[80],[70]]

    jo = lst1[0]
    ji = lst1[1]
    ja = lst1[2]

    jogr = str(lst2[0])
    jigr = str(lst2[1])
    jagr = str(lst2[2])


    lst3 = [[jo + jogr],[ji+jigr],[ja+jagr]]

    print(lst3)

这给了我这个输出:

[['Jo[90]'], ['Ji[80]'], ['Ja[70]']]

但是,我需要我的输出与此类似:

Kim/98
Lib/96
Mar/95
Nat/92
Ophelia/90
Princ/89
Rhea/87

这是我创建列表的方式“确定”。我从哪里可以对列表进行排序?

3 个答案:

答案 0 :(得分:1)

不,您创建列表的方式不好,您想要的实际上是创建一个包含名称和等级对的元素的列表,例如

zip

您可以手动创建此列表,也可以使用内置的list3 = list(zip(list1, list2)) 功能

list3.sort(key=lambda pair: pair[1], reverse=True)

然后您可以通过为列表中的sort方法提供键功能来对该列表进行排序

pair[1]

在这里,我根据成绩通知单进行排序,返回的是reverse=True,即成绩,list3则按降序排序。

然后,您可以简单地遍历for name, grade in list3: print('{}/{}'.format(name, grade)) 并打印:

{{1}}

答案 1 :(得分:0)

string [] -> float[]

答案 2 :(得分:0)

“将这两个列表中的数据放入第三个列表中”,这就是zip的作用。

第3步位于sorted()reverse参数中:

def gradeAvg(lst1,lst2):
    for a, b in sorted(zip(lst1, lst2), key=lambda x: x[1], reverse=True):
        print("{}/{}".format(a, b))

l1 = ['Kim', 'Lib', 'Mar', 'Nat', 'Ophelia', 'Princ' ,'Rhea']
l2 = [98, 96, 95, 92, 90, 89, 87]

gradeAvg(l1, l2)

输出:

Kim/98
Lib/96
Mar/95
Nat/92
Ophelia/90
Princ/89
Rhea/87