![](/img/trans.png)
[英]How to find the *smallest* number in the list that is close to a given number in Python?
[英]How to find the smallest closest number in a list in python
我想知道如何在列表中找到与给定数字最接近的最小数字。 例如:
number = 20
list_of_numbers = [4, 9, 15, 25]
我试过这个:
min(list_of_numbers, key=lambda x:abs(x-number))
输出是 25 而不是 15。问题是它总是给我“最接近的最大”而不是“最接近的最小”。
您可以使key
还包含数字本身并使用它来打破关系:
min(list_of_numbers, key=lambda x: (abs(x - number), x))
不过,你的行为很奇怪。 这可能是一个错误。 您可以通过使用sorted
来解决它,它是稳定的:
sorted(list_of_numbers, key=lambda x: abs(x - number))[0]
将数字列表中的数字添加到密钥中,以便将其考虑在内。
min(list_of_numbers, key=lambda x: (abs(x - number), x))
此外,如果您想要列表中符合要求的第一个数字,请将索引添加到键中:
min(enumerate(list_of_numbers), key=lambda ix: (abs(ix[1] - number), ix[0]))[1]
尽管这仅在Python 2下需要,因为Python 3保证:
如果多个项目最少,则该函数返回遇到的第一个项目。 这与其他保持排序稳定性的工具一致,例如
sorted(iterable, key=keyfunc)[0]
和heapq.nsmallest(1, iterable, key=keyfunc)
。
而不是这个
min(list_of_numbers, key=lambda x:abs(x-number))
试试这个:
number = 20
list_of_numbers = [4, 9, 15, 25]
list_of_numbers.sort(reverse=True)
min(list_of_numbers,key=lambda x : x - number > 0 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.