我想得到5个最接近100的整数,比如100,99,98,101,102。我使用了以下方法,但没有得到想要的结果。
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)输出:
100
100
100
100
100
100然后我这样做了:
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)输出:
95
97
99
101
103
105在这种情况下,超过95、97和105;98、96和102是最接近的;但是,这些闭合数字将被跳过。
请看一看,并提出建议。谢谢:)
发布于 2020-04-25 16:06:16
您只是打印最小值(与您的定义相关),但随后您只弹出下一个元素。相反,可以这样做:
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)这将打印:
100
99
101
98
102但有一种更简单的方法可以得到你想要的东西。只需对其进行排序,并获取前n个元素:
# prints [100, 99, 101, 98, 102]
print(sorted(myList, key=lambda x: abs(100-x))[:5])The top answer to the duplicate question有一个更好的((n))解决方案:
from heapq import nsmallest
print(nsmallest(5, myList, key=lambda x: abs(100-x))https://stackoverflow.com/questions/61422644
复制相似问题