ネストされたリストと、最初のリストのサブセットである別のネストされたリストがあります。
lst = [[1, 2], [3, 4], [1, 2], [5, 6], [8, 3], [2, 7]]
sublst = [[1, 2], [8, 3]]
サブリストにない内部リストを見つけるにはどうすればよいですか。上記の例を使用した目的の出力は次のとおりです。
diff = [[3, 4], [5, 6], [2, 7]]
リスト内包表記を使用します。
In [42]: lst = [[1, 2], [3, 4], [1, 2], [5, 6], [8, 3], [2, 7]]
In [43]: sublst = [[1, 2], [8, 3]]
In [44]: [x for x in lst if x not in sublst]
Out[44]: [[3, 4], [5, 6], [2, 7]]
またはfilter()
:
In [45]: filter(lambda x:x not in sublst,lst)
Out[45]: [[3, 4], [5, 6], [2, 7]]
リストのリストをタプルのリストに変換すると、それらからセットを作成し、差集合演算子を使用できます。
lst = [[1, 2], [3, 4], [1, 2], [5, 6], [8, 3], [2, 7]]
sublst = [[1, 2], [8, 3]]
def tuples(lst): return [tuple(l) for l in lst]
print set(tuples(lst)) - set(tuples(sublst))
印刷されます:
set([(5, 6), (2, 7), (3, 4)])
巨大なリストの場合、評価するよりも速いかもしれません[x for x in lst if x not in sublst]