【发布时间】: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