Список кортежей, у которых есть время гонки. Необходимо указать имя и время победителя для каждой гонки - PullRequest
0 голосов
/ 05 ноября 2018

Я делаю свою работу над Python 3. Нужна помощь в составлении логики для выяснения, кто выиграл гонки.

results_2002 = [("John Williams", "USA", 5.5),("Jim Newsom",
"Canada", 6.1), ("Paul Smith", "Netherlands", 5.3)

results_2004 = [("Simon Dent", "Canada", 6.2),("Stan Doe", "USA",
6.1), ("Paul Smith", "Netherlands", 5.4)

def find_winner(results):

    #I need help with the logic of figure out who won these two races

    return

find_winner(results_2002)
find_winner(results_2004)

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

Ответы [ 3 ]

0 голосов
/ 05 ноября 2018

Попробуйте это:

results_2002 = [("John Williams", "USA", 5.5),("Jim Newsom",
"Canada", 6.1), ("Paul Smith", "Netherlands", 5.3)]

results_2004 = [("Simon Dent", "Canada", 6.2),("Stan Doe", "USA",
6.1), ("Paul Smith", "Netherlands", 5.4)]

def find_winner(results):

    return [j for j in results if j[2] == max([i[2] for i in results])] 

print(*find_winner(results_2002))
print(*find_winner(results_2004))

Выход:

C:\Users\Documents>py test.py
('Jim Newsom', 'Canada', 6.1)
('Simon Dent', 'Canada', 6.2)

ПРИМЕЧАНИЕ: Я взял максимум как победитель , если вы хотите минимальное изменение max на min.

0 голосов
/ 05 ноября 2018

Вы также можете использовать max (или min в зависимости от ваших критериев выигрыша) с key, указывающим, какое значение следует учитывать при определении максимального (или мин):

def find_winner(results):
    return max(results, key=lambda x: x[-1])

Выход

print(find_winner(results_2002)) # ('Jim Newsom', 'Canada', 6.1)
print(find_winner(results_2004)) # ('Simon Dent', 'Canada', 6.2)
0 голосов
/ 05 ноября 2018

Вы можете использовать встроенный метод: сортировка для сортировки списка по определенному ключу.

unsorted_list = [("John Williams", "USA", 5.5),("Jim Newsom","Canada", 6.1), ("Paul Smith", "Netherlands", 5.3)]

# sort with regards to 3d entry of the tuple
sorted_list = sorted(unsorted_list, key=lambda x:x[2]) #
print(sorted_list)

Выход:

[(«Пол Смит», «Нидерланды», 5.3), («Джон Уильямс», «США», 5.5), («Джим Ньюсом», «Канада», 6.1)]

Победителем становится первый элемент или последний элемент списка. Я думаю, что это первое, если целые числа в вашем кортеже являются временами.

def first_place(results):
  """ return the first place if any."""

  sorted_results = sorted(unsorted_list, key=lambda x:x[2])
  return next(iter(sorted_results), None)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...