簡體   English   中英

如何在列表中找到比我的號碼大的最接近的號碼?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM