Find intersection of two nested lists?

前端 未结 20 1130
星月不相逢
星月不相逢 2020-11-22 04:16

I know how to get an intersection of two flat lists:

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]

or

<
20条回答
  •  囚心锁ツ
    2020-11-22 04:48

    If you want:

    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]]
    

    Then here is your solution for Python 2:

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

    In Python 3 filter returns an iterable instead of list, so you need to wrap filter calls with list():

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

    Explanation:

    The filter part takes each sublist's item and checks to see if it is in the source list c1. The list comprehension is executed for each sublist in c2.

提交回复
热议问题