我的问题接受一个(飞机列表)结构,其中一个飞机是一个列表[airplane_code,date,price]:
该功能还会产生(平面列表)。我需要根据我的函数首先接受的另外两个变量(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)=&gt; [['A11',215,300],['A33',260,600],['A22',260,750]]
答案 0 :(得分:0)
复杂的排序功能会简单得多,但您也可以使用二进制排序。使用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
选择更适合您的方法。
答案 1 :(得分: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]]