Создание нескольких списков, размещение внутри другого списка, затем сортировка - PullRequest
0 голосов
/ 28 октября 2018

Мне нужно иметь возможность:

  • определить функцию, которая принимает два параметра.создать два списка, один с именами, а другой с оценками.
  • поместите данные из этих двух списков в третий список с оценками, соответствующими имени, которое находится в том же месте в первом списке.т.е. имеют одинаковое значение индекса.
  • тогда мне нужно иметь возможность отсортировать этот список по убыванию по классам.

Это все, что у меня есть:

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 голосов
/ 28 октября 2018

Нет, то, как вы создали свой список, не совсем в порядке, на самом деле вы хотите создать список с элементами, содержащими пары имени и ранга, например

[('mar', 95), ('Kim', 98) ...]

Вы можете создать этот список вручную илииспользовать встроенную zip функцию

list3 = list(zip(list1, list2))

Затем вы можете отсортировать этот список, предоставив ключевую функцию для метода сортировки в списке

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

Здесь я сортирую на основеУведомление об оценке Я ​​возвращаю pair[1], который является оценкой и reverse=True сортируется в порядке убывания.

Затем вы можете просто выполнить итерацию по list3 и напечатать:

for name, grade in list3:
    print('{}/{}'.format(name, grade))
0 голосов
/ 28 октября 2018

«поместить данные из этих двух списков в третий список», вот что делает zip.

Шаг 3 в параметре 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
0 голосов
/ 28 октября 2018
def function(names,grades):
    return_list = []
    for i in range(0,len(names)):
        return_list.append( {names[i]:grades[i] }
    return_list = sorted(return_list, reverse=True)

    for i in range(0,len(a)):
        for key in a[i]:
            print str(key)+ '/'+str(a[i][key][0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...