首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从python列表中获取5个最接近的整数?

如何从python列表中获取5个最接近的整数?
EN

Stack Overflow用户
提问于 2020-04-25 16:01:39
回答 1查看 44关注 0票数 0

我想得到5个最接近100的整数,比如100,99,98,101,102。我使用了以下方法,但没有得到想要的结果。

代码语言:javascript
复制
myList = [95,96,97,98,99,100,101,102,103,104,105]
for i in myList:
    print(min(myList, key=lambda x:abs(x-100)))
    myList.remove(i)

输出:

代码语言:javascript
复制
100
100
100
100
100
100

然后我这样做了:

代码语言:javascript
复制
myList = [95,96,97,98,99,100,101,102,103,104,105]
for i in myList:
    print(min(myList, key=lambda x:abs(x-i)))
    myList.remove(i)

输出:

代码语言:javascript
复制
95
97
99
101
103
105

在这种情况下,超过95、97和105;98、96和102是最接近的;但是,这些闭合数字将被跳过。

请看一看,并提出建议。谢谢:)

EN

回答 1

Stack Overflow用户

发布于 2020-04-25 16:06:16

您只是打印最小值(与您的定义相关),但随后您只弹出下一个元素。相反,可以这样做:

代码语言:javascript
复制
myList = [95,96,97,98,99,100,101,102,103,104,105]
for i in range(5):  # we want 5 elements
    best = min(myList, key=lambda x: abs(100-x))
    myList.remove(best)
    print(best)

这将打印:

代码语言:javascript
复制
100
99
101
98
102

但有一种更简单的方法可以得到你想要的东西。只需对其进行排序,并获取前n个元素:

代码语言:javascript
复制
# prints [100, 99, 101, 98, 102]
print(sorted(myList, key=lambda x: abs(100-x))[:5])

The top answer to the duplicate question有一个更好的((n))解决方案:

代码语言:javascript
复制
from heapq import nsmallest
print(nsmallest(5, myList, key=lambda x: abs(100-x))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61422644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档