【发布时间】:2013-07-16 07:20:37
【问题描述】:
我的问题接受一个 (listof plane) 结构,其中飞机是一个列表 [airplane_code, date, price]:
- airplane_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]]
determine(plane_list, 200, 260) => [['A11', 215, 300], ['A33', 260, 600], ['A22', 260, 750]]
【问题讨论】:
-
我不明白你对使用二分搜索的限制......你似乎知道如何比较平面,所以任何比较排序都应该有效。你可能应该看看wiki.python.org/moin/HowTo/Sorting
-
我正在学习的课程希望我们获得更多的二分搜索经验(但教给我们的经验很少)。因此,我仅限于二进制搜索。
-
二进制搜索不是排序算法。这是一种在已排序的集合中搜索项目的方法。
-
FWIW,
plane应该是一个元组,而不是一个列表。元组用于存储结构,元组中每个字段的位置表示其含义。 (例如,plane[0] 始终是 str 平面名称。)列表用于存储可互换项目的有序集合(例如,plane元组的列表。)
标签: python binary-search