これが私が問題を抱えているタスクです:
リストの 2 つのリストが与えられた場合、それらをフィルタリングして、共通点のない項目のみに絞り込みます。例)内部リストが同一である場合、それらを除外します。内部リストに共通の項目が少なくとも 1 つある場合は、それらも除外します。
注: ネストのレベルは 1 つだけです。内部リストは文字列のみで構成されます。私はうまくいく解決策を持っていますが、それは非常に面倒です。改善のためのフィードバックをお待ちしております:
最初に、両方のリストで完全に一致するものを除外します。
l3 = filter(lambda x: x not in l2, l1)
l4 = filter(lambda x: x not in l1, l2)
まったく同じアイテムを持たないリストの 2 つのリストになってしまいます。ここで、内側のリストを繰り返し処理し、他の内側のリストとアイテムを共有するリストをすべて取り除きます。
私がやっている:
for i in l3:
for j in i:
for k in l4:
if j in k:
print j, k
removel3.append(tuple(i))
removel4.append(tuple(k))
for i in l4:
for j in i:
for k in l3:
if j in k:
removel3.append(tuple(k))
removel4.append(tuple(i))
for i in list(set(removel3)):
l3.remove(list(i))
for i in list(set(removel4)):
l4.remove(list(i))
(反復ループで直接削除すると、リストのインデックス作成が台無しになり、アイテムがスキップされるため、リストから削除するものの個別のリストを作成します。それを行うためのより良い方法が必要ですが、私はそれを知りません。)
しかし、ええ。それは仕事を成し遂げますが、タプルからセット、リスト、さらにタプルへと進むことは非常に非pythonicに聞こえます。:) フィードバックをお待ちしております。
編集:
サンプル入力:
l1 = [['A', 'B', 'C'], ['D', 'E'], ['F', 'G', 'H']]
l2 = [['A', 'B', 'C'], ['D', 'I'], ['K', 'L', 'M']]
上記のすべての変換の後、最終的には次のようになります。
>>> l3
[['F', 'G', 'H']]
>>> l4
[['K', 'L', 'M']]