作者:小Reve_942 | 来源:互联网 | 2022-11-30 18:13
我有2个清单:
l1 = [ '09/12/2017', '10/24/2017' ]
l2 = [ '09/15/2017', '10/26/2017', '12/22/2017' ]
对于l1中的每个自动收报机,我想在它之后找到距离l2最近的元素,因此输出应为
l3 = [ '09/15/2017', '10/26/2017' ]
正确的方式似乎是以相反的顺序在两个列表上明确地并行迭代,但我希望有一个更"pythonic"的解决方案..
编辑:我确实想要一个最佳复杂性解决方案,(假设列表已排序),我认为是O(max(len(l1),len(l2))).
1> Mihai Alexan..:
您可以通过传递表达式将列表推导与min
方法结合使用.lambda
from datetime import datetime
l1 = [ '09/12/2017', '10/24/2017' ]
l2 = [ '09/15/2017', '10/26/2017', '12/22/2017' ]
l1 = [min(l2, key=lambda d: abs(datetime.strptime(d, "%m/%d/%Y") - datetime.strptime(item, "%m/%d/%Y"))) for item in l1]
产量
['09/15/2017', '10/26/2017']
如果您想要更高效的解决方案,您可以编写自己的insert
排序算法.
def insertSortIndexItem(lst, item_to_insert):
index = 0
while index lst[index]:
index = index + 1
return lst[index]
l2 = sorted(l2, key=lambda d: datetime.strptime(d, "%m/%d/%Y"))
l1 = [insertSortIndexItem(l2, item) for item in l1]