[英]How do I pass both the list and the user's number to a function and have it display all numbers in the list that are greater than the user's number?
[英]How do I find the closest number in a list that is greater than my number?
我想在列表中獲取大於給定數字的最接近的數字(或它的索引)。 名單:
lst=[1,2,5]
我的號碼:
num=3
如果我使用: min(lst, key=lambda x:abs(x-num))
它會給我2
但我希望它給我5
您需要考慮大於num
的數字:
output, index = min((i, idx) for idx, i in enumerate(lst) if i>num)
您可以編寫一個實際的循環來執行此操作:
closest_greater = None
for item in lst:
if item > num and (closest_greater is None or item < closest_greater):
closest_greater = item
給出最接近的closest_greater = 5
或者,您可以給min()
function 一個生成器表達式,其中僅包含大於num
的元素
min(i for i in lst if i > num)
你想使用二進制排序嗎? 在我的測試中,這稍微快一些。
import time
from bisect import bisect
def timer(func):
def function_timer(*args, **kwargs):
start = time.time()
func(*args, **kwargs)
print "The runtime took {} seconds to complete".format(round(time.time() - start, 2))
return function_timer
test_list = [1, 7, 5, 6, 3, 8]
k = 3
@timer
def t1():
for x in range(1000000):
test_list[bisect(test_list, k)]
@timer
def t2():
for x in range(1000000):
min((i, idx) for idx, i in enumerate(test_list) if i > k)
產量
The runtime took 0.22 seconds to complete
The runtime took 0.94 seconds to complete
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.