Я знаю, что есть несколько вопросов с такими названиями, но, похоже, я не могу найти ответы на них, чтобы работать.
У меня есть список списков, 50 раз по 5 элементов. Теперь я хочу отсортировать этот список, применив настраиваемую функцию сравнения к каждому элементу. Эта функция вычисляет соответствие списка, по которому должны быть отсортированы элементы. Я создал две функции, сравнение и соответствие:
def compare(item1, item2):
return (fitness(item1) < fitness(item2))
и
def fitness(item):
return item[0]+item[1]+item[2]+item[3]+item[4]
Затем я попытался вызвать их по:
sorted(mylist, cmp=compare)
или
sorted(mylist, key=fitness)
, или
sorted(mylist, cmp=compare, key=fitness)
или
sorted(mylist, cmp=lambda x,y: compare(x,y))
. Также я попробовал list.sort () с тем же параметры. Но в любом случае функции получают в качестве аргумента не список, а None
. Я понятия не имею, почему это происходит в основном из C ++, это противоречит моей идее о функции обратного вызова. Как я могу отсортировать эти списки с помощью пользовательской функции?
Изменить t получить список в качестве аргумента, но None
. Я понятия не имею, почему это происходит в основном из C ++, это противоречит моей идее о функции обратного вызова. Как я могу отсортировать эти списки с помощью пользовательской функции?
Изменить t получить список в качестве аргумента, но None
. Я понятия не имею, почему это происходит в основном из C ++, это противоречит любому представлению о функции обратного вызова для меня. Как я могу отсортировать эти списки с помощью пользовательской функции?
Изменить Я нашел свою ошибку. В цепочке, которая создает исходный список, одна функция ничего не вернула, но было использовано возвращаемое значение. Извините за беспокойство