Lambda / Sort Summariser Issue - Python - PullRequest
       27

Lambda / Sort Summariser Issue - Python

0 голосов
/ 04 октября 2018

Я использую сумматор Thavelick с некоторыми изменениями и не могу найти способ исправить эту ошибку:

TypeError: () отсутствует 1 обязательный позиционный аргумент: 's2'

Вот код, который, как я знаю, вызывает ошибку:

def reorder(input, output):
    output.sort(key=lambda s1, s2: input.find(s1)-input.find(s2))
    return output

Суммирующая ссылка Thavelick: https://github.com/thavelick/summarize/blob/master/summarize.py

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Из документов: https://docs.python.org/3/howto/sorting.html#key-functions

И list.sort (), и sorted () имеют ключевой параметр для указания функции, которая будет вызываться в каждом элементе списка перед сравнением.

Таким образом,

output.sort(key=lambda s: input.find(s[0])-input.find(s[1]))
0 голосов
/ 04 октября 2018

Этот код, вероятно, использует аргумент cmp для sort, который сейчас отсутствует.Вы не можете просто использовать тот же lamdba.Функция key должна принимать только один аргумент.

Существует способ слепого преобразования кода: используйте functools.cmp_to_key.Однако я полагаю, что в этом случае проще обеспечить правильную ключевую функцию:

output.sort(key=lambda s: input.find(s))

, которая также может быть записана так:

output.sort(key=input.find)

Выражение a - b возвращает отрицательное значениезначение, если a < b, 0, если a == b, и положительное значение, если a > b.Таким образом, это означает, что ваш код сортирует output в соответствии с тем, где содержащиеся в нем элементы находятся в input.

Так что функция key предназначена только для поиска, где подстрока находится в input.


Чтобы использовать cmp_to_key, вы должны сделать это вместо:

from functools import cmp_to_key

output.sort(key=cmp_to_key(lambda s1, s2: input.find(s1) - input.find(s2)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...