Python Определение самого последнего времени (даты и времени) из списка? - PullRequest
0 голосов
/ 28 марта 2020

У меня есть два списка time_list с датой и name_list с именами, сопоставленными друг с другом соответственно.

    time_list = [datetime.datetime(2020, 3, 28, 18, 49, 36, tzinfo=tzutc()),
    datetime.datetime(2020, 3, 28, 18, 54, 53, tzinfo=tzutc()),
    datetime.datetime(2020, 3, 28, 19, 5, 28, tzinfo=tzutc()),
    datetime.datetime(2020, 3, 28, 18, 59, 56, tzinfo=tzutc()),
    datetime.datetime(2020, 3, 28, 18, 55, 42, tzinfo=tzutc())]


    name_list = [a,b,c,d,e]

Как найти, какой name_list имеет самое последнее время в time_list?

В приведенном выше примере: time_list[2] имеет самое последнее значение name_list[2]

Ожидаемый результат:

        most_recent_name_list = ['c']

Ответы [ 2 ]

1 голос
/ 28 марта 2020

zip два списка, это даст вам кортежи (дата, имя). Возьмите максимум этих кортежей (сначала они будут отсортированы по дате, затем по имени) и извлеките имя из максимума:

import datetime
from dateutil.tz import tzutc

time_list = [datetime.datetime(2020, 3, 28, 18, 49, 36, tzinfo=tzutc()),
    datetime.datetime(2020, 3, 28, 18, 54, 53, tzinfo=tzutc()),
    datetime.datetime(2020, 3, 28, 19, 5, 28, tzinfo=tzutc()),
    datetime.datetime(2020, 3, 28, 18, 59, 56, tzinfo=tzutc()),
    datetime.datetime(2020, 3, 28, 18, 55, 42, tzinfo=tzutc())]


name_list = ['a', 'b', 'c', 'd', 'e']

max(zip(time_list, name_list))[1]
#'c'
0 голосов
/ 28 марта 2020

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

sorted_list = sorted(range(len(time_list)),key=time_list.__getitem__,reverse=True)

и вы можете получить индекс сортировки как

name_list[sorted_list[0]]
...