【问题标题】:get multiple tuples from list of tuples using min function使用 min 函数从元组列表中获取多个元组
【发布时间】:2020-05-20 01:04:16
【问题描述】:

我有一个看起来像这样的列表

mylist = [('Part1', 5, 5), ('Part2', 7, 7), ('Part3', 11, 9), ('Part4', 45, 45), ('part5', 5, 5)]

我正在寻找数字最接近我输入的所有元组

现在我正在使用此代码

result = min([x for x in mylist if x[1] >= 4 and x[2] >= 4])

我得到的结果是

('part5', 5, 5)

但我正在寻找一个看起来更像的结果

[('Part1', 5, 5), ('part5', 5, 5)]

如果里面有更多的元组(在这个例子中我有 2 个但可能更多)然后我想把所有的元组都拿回来

整个代码

mylist = [('Part1', 5, 5), ('Part2', 7, 7), ('Part3', 11, 9), ('Part4', 45, 45), ('part5', 5, 5)]
result = min([x for x in mylist if x[1] >= 4 and x[2] >= 4])
print(result)

【问题讨论】:

  • 欢迎来到 SO。首先,我不得不说,在您的示例中,列表理解与 mylist 没有区别,因为您的示例数据中的所有数字都大于 4。第二:不,您的代码不返回('part5', 5, 5),而是返回('part1', 5, 5)。第三:我认为你误解了min 函数是如何作用于元组的:这样使用它只会给你一个具有最小第一个元素 的元组,即Part1。您可以通过简单地将其命名为 Part7 或其他名称来测试它,min 的结果将是 ('part2', 7, 7)
  • 除此之外,您还应该考虑如何定义列表元素的最小值。如果你可以在函数中表达这个想法,你可以将此函数用作min函数的key参数,这样它就会根据你的需要搜索最小值。
  • 嗨 @SpghttCd 感谢您在第 5 部分欢迎它是错字。无论如何,如果 min 函数没有给我结果,那么我应该使用什么?
  • 如我所说,您可以使用 min 函数。但是它的元组标准排序算法(按第一个元素排序)似乎不是你需要的。因此,您必须考虑如何对三元素元组列表进行排序,以便能够将其中一个或多个命名为“最小”:例如('partx', 4, 6) 是否被认为小于 ('partx', 5, 5)?或相等? ('partx', 4, 5) 是否等于 ('partx', 5, 4)? ... ...
  • 这与排序无关如果 x[1] >= 4 和 x[2] >= 4]) 已经定义我想取回最接近我的输入的值所以我的输入是 4,最接近的是 5 如果我的输入会是 10 和 8 那么我只会回来 ('Part3', 11, 9) 因为这是最接近和更高的时候

标签: python-3.x


【解决方案1】:
threshold = 4
mylist = [('Part1', 5, 5), ('Part2', 7, 7), ('Part3', 11, 9), ('Part4', 45, 45), ('part5', 5, 5)]

filtered = [x for x in mylist if x[1] >= threshold and x[2] >= threshold]
keyfunc = lambda x: x[1]
my_min = keyfunc(min(filtered, key=keyfunc))

result = [v for v in filtered if keyfunc(v)==my_min]


# [('Part1', 5, 5), ('part5', 5, 5)]

【讨论】:

  • 谁不...?这很有趣,据我所知,到目前为止我学到了什么......
  • 是的,这是一生的学习,是的,我同意它的乐趣,但有时可能非常具有挑战性
  • 是的。最终最大的挑战往往就在我们自己的耳朵中间:-)
  • xDxD 是的,这永远是最大的。特别是为了保持凉爽:-)
猜你喜欢
  • 2012-02-29
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
  • 2019-06-28
  • 2020-01-09
  • 1970-01-01
  • 2019-08-22
  • 2018-04-07
相关资源
最近更新 更多