【问题标题】:How do I use lambda expression to make comparison?如何使用 lambda 表达式进行比较?
【发布时间】:2020-02-08 14:56:25
【问题描述】:

我有一个硬件问题,需要通过机场列表并使用 lambda 表达式找到最佳和最差准点记录。

该列表包含两列 Airport Name 和 Delay Departure。

因此,如果Departure Departure > 0,我们计为1 次延迟,否则我们计为准时。 如何使用 lambda 表达式做到这一点?

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

我希望 lambda 表达式能够识别机场名称及其延误和准点频率。然后我可以通过 max 和 min 找出哪些机场的性能最好和最差。

例如,airportA 是最好的,性能: 机场B是最差的,性能:

【问题讨论】:

  • 您可以添加示例数据吗?不确定“列表包含两列”是什么意思
  • 你的意思是延迟 = list(map(lambda x: x.Orig == airport and x.DepDelay > 0, data))。您使用一个等号进行逻辑比较
  • 另外,您当前的代码有什么问题?
  • 对不起...我的意思是该文件包含两列(机场名称和延误时间)。我必须通过文件找到机场的最佳和最差性能及其性能。

标签: python python-3.x list oop lambda


【解决方案1】:

根据您的代码,我假设您的输入数据如下所示:

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

【讨论】:

  • 我很乐意提供帮助。 @EzrealReal
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-28
  • 2022-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多