在速度方面,您可能想要使用字典。似乎以一种或另一种方式,您将需要遍历一个列表。字典当然比遍历一个列表要快,所以你可以将至少一个列表变成一个字典。(我在两个单独的列表中测试了以下解决方案,其中包含 200,000 个条目,就像你的一样,我的速度平均为 0.109999 秒。列表远远超出了这个标记。)如果你只是尝试使用列表,你可能不会接近那个或元组,除非您的条目顺序允许您使用 zip 之类的东西。您的序列号似乎是唯一的,因此以下方法可行(通过迭代一个列表,然后将项目 1、3 和 4 [在位置 0、2 和 3] 与字典中的值进行比较):
list_1 = [[1, "BMW", "Boston", "01Jan2013"], [37, "Chevrolet", "Denver", "05Jan2013"],
[854, "BMW", "Boston", "01Jan2013"]]
list_2 = [[1, "Mercedes", "Boston", "01Jan2013"], [37, "Chevrolet", "Denver", "05Jan2013"],
[854, "Toyota", "Boston", "01Jan2013"]]
dict_2 = dict()
for elem in list_2:
dict_2[elem[0]] = elem[1:]
for item in list_1:
if dict_2[item[0]][1:] == item[2:]: # Have to offset the index since dict list only has three elements
print item
[1, 'BMW', 'Boston', '01Jan2013']
[37, 'Chevrolet', 'Denver', '05Jan2013']
[854, 'BMW', 'Boston', '01Jan2013']
将第二个列表转换为字典后,您只需遍历一个列表即可获得结果。此解决方案将从您似乎想要的 list_1 返回每个匹配项的整个子列表。如果您想要两个列表中的完整匹配子列表,这将起作用:
for item in list_1:
if dict_2[item[0]][1:] == item[2:]:
print item, [item[0]] + dict_2[item[0]]
[1, 'BMW', 'Boston', '01Jan2013'] [1, 'Mercedes', 'Boston', '01Jan2013']
[37, 'Chevrolet', 'Denver', '05Jan2013'] [37, 'Chevrolet', 'Denver', '05Jan2013']
[854, 'BMW', 'Boston', '01Jan2013'] [854, 'Toyota', 'Boston', '01Jan2013']