Сортировка по 3 элементам в кортеже Python 3.2

Попытка отсортировать кортеж, который указывает день рождения человека (день, месяц, год) от самого младшего к старшему.

Так, например

def sort_something(birthday: [(int, int, int)]):
    sorted(birthday, key=lambda int:int[2])
    return birthday

Однако, когда я запускаю это, он выдает ошибку диапазона индекса.

Traceback (most recent call last):
    line 68, in <module>
    ('Joyce',(2,21,1920))
    line 20, in sort_ages
    sorted(data, key = lambda int: int[2])
    line 20, in <lambda>
    sorted(data, key = lambda int: int[2])
IndexError: tuple index out of range

Мысли?

1 ответ

В вашем коде несколько ошибок:

  • sorted(birthday) возвращает копию. Не меняет birthday
  • int[2] должен работать, если каждый элемент имеет 3 числа (день, месяц, год)
  • не использовать int как имя переменной, это встроенное имя
from datetime import date

def by_date(day_month_year):
    return date(*reversed(day_month_year))

L = [(3, 12, 2059), (13, 3, 1999), (1, 1, 2059)]
print(L)
L.sort(key=by_date)
print(L)

Выход

[(3, 12, 2059), (13, 3, 1999), (1, 1, 2059)]
[(13, 3, 1999), (1, 1, 2059), (3, 12, 2059)]
Другие вопросы по тегам