0

我的问题接受一个 (listof plane) 结构,其中飞机是一个列表 [airplane_code, date, price]:

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

该函数还产生一个(平面列表)。我需要先根据我的函数接受的另外两个变量(start_date 和 end_date),然后按价格(按升序)过滤此列表。但是,我仅限于使用二进制搜索概念来排序价格

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

我无法弄清楚二进制搜索如何让我对列表进行排序,并希望得到任何帮助。这是我到目前为止所做的(过滤给定的日期变量):

def determine(planes, start_date, end_date):
    correct_planes = []
    plane_price = []
    final_selection = []
    for plane in planes:
        if plane[1] >= start_date and plane[1] <= end_date:
            correct_planes.append(plane)
            plane_price.append(plane[2])

该函数如何工作的示例:

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

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

4

2 回答 2

0

复杂的排序函数会简单得多,但您也可以使用二进制排序。这可以最好地使用 lambdas 来实现。

有关实施细节,请参阅这些链接:

1)具有多个参数的复杂排序?

2)嵌套元组列表的高级排序标准

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

选择任何对您来说更舒适的方法。

于 2013-07-16T07:32:28.060 回答
0

这可以使用 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]]
于 2013-07-16T07:36:51.870 回答