速度の面では、おそらく辞書を利用したいと思うでしょう。どうやら、リストを繰り返す必要があるようです。もちろん、辞書はリストを反復処理するよりも高速であるため、リストの少なくとも1つを辞書にすることができます。(2つの別々のリストであなたと同じように200,000のエントリを使用して次のソリューションをテストし、完了までの平均速度は0.109999秒でした。リストはそのマークをはるかに超えていました。)リストを使用しようとすると、おそらくそれに近づくことはありません。またはタプル。ただし、エントリの順序でzipなどを使用できる場合を除きます。シリアル番号は一意のように見えるので、次のように機能します(1つのリストを繰り返し処理してから、項目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']
2番目のリストを辞書に変換すると、結果を取得するために1つのリストを反復処理するだけで済みます。このソリューションは、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']