我有2个列表(以下示例,但实际每个列表中有100个以上):

ListA = [29/11/2017 03:44:42, 23/11/2017 07:36:35, etc....]
ListB = [12/09/2017 02:00:34, 12/05/2017 14:00:25, etc....]


我试图遍历ListA中的每个元素,找出ListB中的哪个元素最接近该日期。我正在努力做到这一点。

我首先确保两个列表元素都是日期时间对象。

但是之后,我一直陷于困境...我可能正在考虑这个错误。

for i in ListA:
    closestTimestamp = min(key, key=lambda datetime: abs(timestamp - [j for j in ListB]))


这表示未定义key。如果这是一个愚蠢的问题,我对Python表示歉意。

最佳答案

您应该将一个可迭代的字符(例如ListB)和一个键函数传递给min()。尝试这个:

for a in ListA:
    closestTimestamp = min(listB, key=lambda b: abs(a-b))


顺便说一句,此解决方案的时间复杂度为O(nm),对于较大的列表而言可能较慢。在那种情况下,考虑将binary search用于O(nlogm)复杂度。

10-08 16:06