1. ホーム
  2. python

[解決済み] ネストされた2つのリストの交点を求めるには?

2022-03-21 09:16:46

質問

2つのフラットリストの交点を求める方法を知っています。

b1 = [1,2,3,4,5,9,11,15]
b2 = [4,5,6,7,8]
b3 = [val for val in b1 if val in b2]

または

def intersect(a, b):
    return list(set(a) & set(b))
 
print intersect(b1, b2)

しかし、ネストされたリストに対して交差点を見つけなければならないとき、私の問題は始まります。

c1 = [1, 6, 7, 10, 13, 28, 32, 41, 58, 63]
c2 = [[13, 17, 18, 21, 32], [7, 11, 13, 14, 28], [1, 5, 6, 8, 15, 16]]

最後に私が受け取りたいのは

c3 = [[13,32],[7,13,28],[1,6]]

これ、みんな手伝ってくれる?

関連

どのように解決するのですか?

必要なら

c1 = [1, 6, 7, 10, 13, 28, 32, 41, 58, 63]
c2 = [[13, 17, 18, 21, 32], [7, 11, 13, 14, 28], [1, 5, 6, 8, 15, 16]]
c3 = [[13, 32], [7, 13, 28], [1,6]]

では、Python 2の解決策を紹介します。

c3 = [filter(lambda x: x in c1, sublist) for sublist in c2]

Python 3では filter の代わりにイテラブルを返します。 list というように filter の呼び出しは list() :

c3 = [list(filter(lambda x: x in c1, sublist)) for sublist in c2]

説明する。

フィルタ部分は、各サブリストの項目を受け取り、それがソースリストc1にあるかどうかをチェックする。 リスト内包は c2 の各サブリストに対して実行される。