在Python中使用二进制搜索对列表进行排序

2024-05-06 16:46:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题接受一个(listofplane)结构,其中飞机是一个列表[飞机代码,日期,价格]:

  • 飞机代号是飞机名称
  • 日期为1-365(含1-365),其中每个飞机的所有日期可能不是唯一的
  • 价格为int[>;=0],其中每架飞机的所有价格都是唯一的

该函数还生成一个(listof plane)。我需要根据我的函数接受的另外两个变量(开始日期和结束日期)过滤这个列表,然后按价格(按升序排列)。但是,我仅限于使用二进制搜索概念对价格进行排序

def binary_search(lst, target):
    beginning = ...
    end = ...
    while ...:
        middle = ...
        if lst[middle] < target:
            ...
            ##update beginning and end
        else:
            ...
            ##update beginning and end

我想不出二进制搜索是如何让我对列表进行排序的,希望能得到任何帮助。这是我迄今为止所做的(筛选给定的日期变量):

^{pr2}$

函数如何工作的示例:

plane_list = [['A11', 215, 300], ['A22', 260, 750], ['A33', 230, 600], ['A44', 300, 400]]

determine(plane_list, 200, 260) => [['A11', 215, 300], ['A33', 260, 600], ['A22', 260, 750]]


Tags: and函数middletarget列表排序二进制update
2条回答

复杂的排序函数要简单得多,但也可以使用二进制排序。这可以通过使用lambdas来实现。在

请参阅以下链接了解实施细节:

1)Complex sort with multiple parameters?

2)Advanced sorting criteria for a list of nested tuples

编辑:根据hivert的评论,你也可以使用itemgetter进行排序。实现细节如下:http://wiki.python.org/moin/HowTo/Sorting/#Sort_Stability_and_Complex_Sorts

选择更适合你的方法。在

这可以通过使用python排序算法来完成。你只做二进制搜索的限制,从编码以及性能上看似乎不太好,因为列表不会很大。在

>>> plane_list = [['A11', 215, 300], ['A22', 260, 750], ['A33', 230, 600], ['A44', 300, 400]]
>>> start_date,end_date = 200, 260
>>> new_list = [x for x in plane_list if start_date <= x[1] <= end_date]
>>> new_list
[['A11', 215, 300], ['A22', 260, 750], ['A33', 230, 600]]
>>> new_list = sorted(new_list,key= lambda x:x[1])
>>> new_list
[['A11', 215, 300], ['A33', 230, 600], ['A22', 260, 750]]

相关问题 更多 >