Я не уверен, как написать функцию для сортировки (используя ключевой параметр) и переписать функцию с помощью лямбда-выражения - PullRequest
1 голос
/ 30 апреля 2019

Создайте функцию с именем last_four, которая принимает идентификационный номер и возвращает последние четыре цифры. Например, число 17573005 должно возвращать 3005. Затем используйте эту функцию для сортировки списка идентификаторов, хранящихся в переменной, идентификаторы, от низшего к наибольшему. Сохраните этот отсортированный список в переменной sorted_ids. Подсказка: помните, что только строки могут быть проиндексированы, поэтому могут потребоваться преобразования.

Вторая часть проблемы: «Сортировать идентификаторы списка по последним четырем цифрам каждого идентификатора. Сделайте это с помощью лямбды, а не с помощью определенной функции. Сохраните этот отсортированный список в переменной sorted_id»

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

Затем я установил переменную sorted_ids равной last_four с указанным входным параметром.

def last_four(x):
    r = []
    for i in x:
        r.append(str(i)[-4:])

    r = sorted(r)
    print(r)
    return r

ids = [17573005, 17572342, 17579000, 17570002, 17572345, 17579329]

sorted_ids = last_four(ids)

Когда я запускаю приведенный выше код, я получаю сообщение об ошибке: «Ошибка: TypeError: объект 'int' не повторяется», поскольку входные данные представляют собой список идентификаторов. Читая о том, как решить эту проблему, я думаю, что мой результат должен быть что-то вроде "sorted_ids = sorted(ids, key = last_four)". Когда я пытаюсь использовать фрагмент кода в предыдущем предложении, я все равно получаю ту же ошибку TypeError, как я упоминал ранее. Я не уверен, как написать это, используя необязательный параметр ключа.

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

Любое руководство будет оценено.

1 Ответ

1 голос
/ 30 апреля 2019

Чтобы сделать это, используя sorted с функцией lambda в качестве key, вам нужно указать, что вы хотите сделать для каждого элемента списка в функции lambda. В этом случае вы хотите установить подмножество последних четырех чисел каждого идентификатора, что можно сделать только путем преобразования целочисленного идентификатора в строку.

Это означает, что выражение sorted с функцией lambda для key равно:

ids = [17573005, 17572342, 17579000, 17570002, 17572345, 17579329]
sorted(ids, key=lambda x: str(x)[-4:])

# Output
[17570002, 17572342, 17572345, 17573005, 17579000, 17579329]

Это говорит о сортировке списка по четырем последним цифрам каждого идентификатора после преобразования идентификатора в строку.

Эквивалентный способ сделать это, используя именованную функцию:

def last_four(x):
    return str(x)[-4:]

sorted(ids, key=last_four)

Выбор за вами. Выражение lambda меньше кода, но именованная функция (last_four) может быть проще для понимания.

...