假设您有以下两个列表:
l1 = [0,30,45,55,80,90]
l2 = [35,65,70,75,100,120]
列表规则:
- `l1` 总是从 0 开始,而 `l2` 必须从大于 0 开始
- 列表必须按从小到大的顺序
目标:
本质上,每个数字都是打开和关闭某物的索引。目标是返回l2
关闭第一个项目的项目l1
解释:
中的一个项目l2
将“关闭”l1
其中最接近的数字小于自身的项目。那么这两个数字都不再可用。使用作为示例给出的列表,会发生以下情况:
0 打开
30个打开
35 关闭 30
45 打开
55 打开
65 关闭 55
70 关闭 45
75 关闭 0
答案 = 75
我相信有一种方法可以做到这一点,只需遍历每个列表一次。我想出的方法需要l1
在关闭的情况下进行多次迭代。所以在这个例子中,它必须迭代 4 次才能得到正确的答案。这是该功能:
def f(l1,l2):
for x in l2:
new_l = [i for i in l1 if i < x]
closed = new_l[-1]
if closed == 0:
answer = x
break
else:
l1.remove(closed)
return answer
有什么方法可以检测什么关闭了什么,这样我就不需要重复必要的次数。在我的实际情况下,这可能需要数百次迭代,因为这个函数实际上会在一个可能持续一段时间的循环中运行