我有一个大约有2000行的列表[UnixTimestamp,Value01,Value02](它是JSON),而我还有另一个列表,有几百万行[UnixTimestamp,Value01,Value02](它是一个。 csv)我想弄清楚较小列表中的每个元素在第二个列表中是否具有相同值的元素。 这两个列表均按时间戳排序
最简单的方法显然是这样的:
for x in small_List:
if x in big_list:
return True
return False
但这有道理还是有更有效的方法?
谢谢
答案 0 :(得分:1)
如果它们只是列表,则可以尝试类似的操作。
set(small_list) & set(big_list)
转换为set
会删除重复的值,您可以使用&
运算符比较并得出两个集合的相同值。
答案 1 :(得分:0)
两者均已按时间戳排序,因此可以利用它来发挥优势:
big_list_index = 0
for x in small_list:
y = big_list[big_list_index]
while big_list_index < len(big_list) and y.timestamp < x.timestamp:
big_list_index += 1
y = big_list[big_list_index]
while big_list_index < len(big_list) and y.timestamp == x.timestamp:
if y.timestamp == x.timestamp and y.value01 == x.value01 and y.value02 == x.value02:
return True
else:
big_list_index += 1
y = big_list[big_list_index]
如果时间戳是唯一的,则复杂度为O(len(big_list)+ len(small_List))