Как использовать лямбда-выражение для сравнения? - PullRequest
1 голос
/ 11 октября 2019

У меня есть вопрос HW, который должен просмотреть список аэропортов и найти лучшие и худшие записи по времени, используя лямбда-выражение.

Список содержит два столбца Название аэропорта и Задержка отправления.

Так что если Задержка отправления> 0, мы считаем 1 задержку, иначе мы учитываем время. Как я могу сделать это, используя лямбда-выражение?

for x in data:
    if airport != x.Orig:
       continue
    delay = list(map(lambda x: x.Orig = airport and x.DepDelay > 0, data))
    print(len(delay))
    ontime = list(map(lambda x: x.Orig = airport and x.DepDelay == 0, data))
    print(len(ontime))

    perf = ontime / (ontime +delay)

    if perf < minPerf:
       minAiport = airport
       minPerf = perf
    if perf > maxPerf:
       maxAirport = airport
       maxPerf = perf

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

Например, airportA - лучший, perf: airportB - худший, perf:

1 Ответ

0 голосов
/ 11 октября 2019

В соответствии с вашим кодом, я предполагаю, что ваши входные данные выглядят следующим образом:

class Data:
    def __init__(self, airportname, depdelay):
        self.Orig = airportname
        self.DepDelay = depdelay

data = [
        Data('airportname1',3),
        Data('airportname2',0),
        Data('airportname3',2),
        Data('airportname1',1),
        Data('airportname2',4),
        Data('airportname3',0),
        Data('airportname2',0),
        Data('airportname1',0),
        Data('airportname3',1),
        Data('airportname4',3),
        Data('airportname2',2),
        Data('airportname1',0),
        Data('airportname4',3),
        ]

Пожалуйста, попробуйте следующее решение:

result = {}
for x in data:
    if x.Orig not in result:
        result[x.Orig] = {'delay':0, 'ontime':0}
    if x.DepDelay > 0:
        result[x.Orig]['delay'] += 1
    else:
        result[x.Orig]['ontime'] += 1

maxperf = 0
minperf = 1
maxairport = []
minairport = []
for airport, r in result.items():
    a = r['ontime']
    b = r['delay']
    perf = a/(a+b)
    print("Airport Name: {}, ontime: {}, delay: {}, perf: {}".format(airport,a,b,perf))
    if perf > maxperf:
        maxperf = perf
        maxairport = [airport,]
    elif perf == maxperf:
        maxairport.append(airport)

    if perf < minperf:
        minperf = perf
        minairport = [airport,]
    elif perf == minperf:
        minairport.append(airport)

print("best performance airport: {}, performance: {}".format(maxairport, maxperf))
print("worst performance airport: {}, performance: {}".format(minairport, minperf))

Вывод на основе моего ввода:

Airport Name: airportname1, ontime: 2, delay: 2, perf: 0.5
Airport Name: airportname2, ontime: 2, delay: 2, perf: 0.5
Airport Name: airportname3, ontime: 1, delay: 2, perf: 0.3333333333333333
Airport Name: airportname4, ontime: 0, delay: 2, perf: 0.0
best performance airport: ['airportname1', 'airportname2'], performance: 0.5
worst performance airport: ['airportname4'], performance: 0.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...