【问题标题】:Find tuple in list of tuples in python在python中的元组列表中查找元组
【发布时间】:2022-01-06 20:15:04
【问题描述】:

我有一个元组列表 (simulationtime,efficiency),我想找到相对于最短仿真时间说明最大效率的元组。关于如何做到这一点的任何提示? 原本非常大的列表的一小部分:

[(109.00537427472713,0.8),(109.00588429136333,0.85),(109.00649436705454,0.86),(110.00055419961151,0.86),(110.00122432147343,0.86),(110.00172424060818,0.86),(110.00236418239592,0.86),(110.00292411815163,0.86 )]

我希望列表中的输出为 (109.00649436705454, 0.86),因为它对应于最短仿真时间的最高效率。现在我正在做:

next(v for v in AoD_log if v[1] >= 0.85)

但可实现的最大效率:元组的索引[1] 并不总是已知的。

【问题讨论】:

  • 请发布一些示例数据和您对解决方案的尝试。
  • @kindall,我已经更新了问题
  • 109.00649436705454 不是最小模拟时间,是吗? 109.00537427472713 更小。
  • @ManlaiA 这是具有最大可能效率的最小模拟时间:0.86
  • @UmairShahid 啊,所以目标是在最大效率的情况下最小化模拟时间,好的。请参阅我的编辑。我想我这次拥有它。

标签: python list tuples


【解决方案1】:
your_list = [(109.00537427472713, 0.8), (109.00588429136333, 0.85), (109.00649436705454, 0.86), (110.00055419961151, 0.86), (110.00122432147343, 0.86), (110.00172424060818, 0.86), (110.00236418239592, 0.86), (110.00292411815163, 0.86)]
max_efficiency = max(your_list, key=lambda x : x[1])[1]
min_simulation_time = min((x for x in your_list if x[1]==max_efficiency))

输出:

(109.00649436705454, 0.86)

【讨论】:

  • 我添加了一些示例数据并澄清了我需要什么,也许这会有所帮助。
【解决方案2】:

以@Manlai A 的回答为基础:

试试这个:

next(v for v in AoD_log if v[1] == max(AoD_log, key=lambda x: x[1]))

【讨论】:

  • 您需要等同于元组中的第二个元素,例如:next(v for v in AoD_log if v[1] == max(AoD_log, key=lambda x: x[1])[1])。然后就可以了。
  • 我所做的是min(i for i in AoD_log if i[1]==max(AoD_log)[1]),它似乎完成了这项工作,我仍然是python的初学者,所以我不明白这个实现与上面的有什么不同。
  • 是的,可以,不过,您提供的日志样本看起来是按模拟时间排序的 - 无需进行最小检查
猜你喜欢
  • 1970-01-01
  • 2010-11-16
  • 2015-07-06
  • 2011-01-12
  • 1970-01-01
  • 2020-08-16
  • 1970-01-01
  • 1970-01-01
  • 2016-07-18
相关资源
最近更新 更多