有谁知道如何匹配二维列表的两个列表?

时间:2019-09-03 14:28:39

标签: python list arraylist pattern-matching match

我有两个列表,它们是至少包含100行的二维列表。我想将A匹配到B,反之亦然。但是真正的问题是不是从A逐行键入以匹配B。是否有更快的方法来遍历B的所有行以匹配B的所有行?

我尝试了a [0]和a [1]和a [2]。此方法将起作用,但是我必须逐行输入很多内容。这将是很多类型的输入,尤其是如果有很多行的话?

我有两个列表,它们是二维列表。我想匹配A中的任何值以匹配B中的任何值

a=[[9, 15, 25],[4, 14, 18, 25],[11, 12, 24, 25],[4, 8, 9, 26]]

b=[[2, 4, 7, 13, 14],[3, 5, 8, 13, 14],[6, 9, 10, 13, 14],[5, 6, 7, 13, 15],[3, 4, 9, 13, 15],[2, 8, 12, 13, 15],[4, 6, 8, 14, 15],[2, 5, 9, 14, 15]]

b0 = [list(filter(lambda x: x in a[0], sublist)) for sublist in b]

b1 = [list(filter(lambda x: x in a[1], sublist)) for sublist in b]

b2 = [list(filter(lambda x: x in a[2], sublist)) for sublist in b]

b3 = [list(filter(lambda x: x in a[3], sublist)) for sublist in b]

是否有更快的方法遍历所有行?尤其是如果有很多行

1 个答案:

答案 0 :(得分:2)

您可以这样做:

for item_a in a:
    result = []
    for item_b in b:
        # Compare elements of lists 
        result.append(list(set(item_a) & set(item_b)))
    print(result)

输出:

[[], [], [9], [15], [9, 15], [15], [15], [9, 15]]
[[4, 14], [14], [14], [], [4], [], [4, 14], [14]]
[[], [], [], [], [], [12], [], []]
[[4], [8], [9], [], [9, 4], [8], [8, 4], [9]]

编辑:

for idx,item_a in enumerate(a):
    result = []
    for item_b in b:
        result.append(list(set(item_a) & set(item_b)))
    print("{} : {}".format(idx,result))

输出:

0 : [[], [], [9], [15], [9, 15], [15], [15], [9, 15]]
1 : [[4, 14], [14], [14], [], [4], [], [4, 14], [14]]
2 : [[], [], [], [], [], [12], [], []]
3 : [[4], [8], [9], [], [9, 4], [8], [8, 4], [9]]

使用set.intersection()的解决方案:

for idx,item_a in enumerate(a):
    result = []
    a = set(item_a)
    for item_b in b:
        result.append(list(a.intersection(item_b)))
    print("{} : {}".format(idx,result))