在Python中使用二进制搜索对列表排序
我的问题接受(飞机列表)结构,其中飞机是一个列表[飞机代码、日期、价格]:在Python中使用二进制搜索对列表排序,python,binary-search,Python,Binary Search,我的问题接受(飞机列表)结构,其中飞机是一个列表[飞机代码、日期、价格]: 飞机代码是飞机名称 日期为1-365,其中每个平面的所有日期可能不唯一 价格为int[>=0],其中每个平面的所有价格都是唯一的 该函数还生成(平面列表)。我需要首先根据函数接受的另外两个变量(开始日期和结束日期)过滤这个列表,然后根据价格(升序)过滤。但是,我仅限于使用二进制搜索概念对价格进行排序: def binary_search(lst, target): beginning = ... en
- 飞机代码是飞机名称
- 日期为1-365,其中每个平面的所有日期可能不唯一
- 价格为int[>=0],其中每个平面的所有价格都是唯一的
def binary_search(lst, target):
beginning = ...
end = ...
while ...:
middle = ...
if lst[middle] < target:
...
##update beginning and end
else:
...
##update beginning and end
def二进制搜索(lst,目标):
开始=。。。
结束=。。。
而
中间=。。。
如果lst[中间]<目标:
...
##更新开始和结束
其他:
...
##更新开始和结束
我不知道如何二进制搜索将允许我排序列表,并将感谢任何帮助。这就是我到目前为止所做的(过滤给定的日期变量):
def确定(平面、开始日期、结束日期):
正确的_平面=[]
飞机价格=[]
最终选择=[]
对于平面中的平面:
如果平面[1]>=开始日期和平面[1][[A11',215,300],[A33',260,600],[A22',260,750]]
复杂的排序函数会简单得多,但也可以使用二进制排序。这可以通过使用lambdas实现
有关实施细节,请参阅以下链接:
(一)
(二)
编辑:根据hivert的评论,您也可以使用itemgetter进行排序。实施详情如下:
选择对您更合适的方法。这可以使用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]]
平面列表=['A11',215,300],'A22',260,750],'A33',230,600],'A44',300,400]]
>>>开始日期,结束日期=200260
>>>新列表=[x代表平面中的x列表,如果开始日期>新列表
[A11',215,300],[A22',260,750],[A33',230,600]]
>>>新建列表=已排序(新建列表,键=lambda x:x[1])
>>>新名单
[A11',215,300],[A33',230,600],[A22',260,750]]
我不理解您使用二进制搜索的限制条件……您似乎知道如何比较平面,因此任何形式的比较都应该有效。您可能应该看看我正在学习的课程,它希望我们获得更多的二进制搜索经验(但教给我们的很少)。因此,我仅限于二进制搜索。二进制搜索不是一种排序算法。它是一种在已排序的集合中搜索项目的方法。FWIW,plane
应该是元组,而不是列表。元组用于存储结构,元组中每个字段的位置表示其含义。(例如,plane[0]列表用于存储可互换项的有序集合(例如plane
元组的列表)正如我上面提到的,我正在学习的课程希望我们在二进制搜索方面获得更多经验,因此我被限制在二进制搜索方面。谢谢你的回答。正如我上面提到的,我正在学习的课程希望我们在二进制搜索方面获得更多经验,因此我被限制在二进制搜索方面。我肯定也会探索这种方法l、 抱歉,没有看到评论。我想我只能使用二进制搜索,这意味着你只知道如何使用二进制搜索。
>>> 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]]