首页 > 解决方案 > 在列表列表中查找不完全匹配

问题描述

假设我有一个列表列表,例如

    new_list=[[1,2,3],
              [9,1,6],
              [7,3,4]]

我想做类似的事情

    n=new_list.index([7,:,4])

我想

n==2

因为确实,

new_list[2]==[7,3,4]

我希望这个例子能说明我的观点,我想在不指定要找到的完整列表的情况下查找列表列表是否包含某个列表。

标签: python

解决方案


可以定义一个部分“匹配”函数,其中None匹配所有,然后用于next查找第一个部分匹配(类似于什么index,只查找第一个匹配):

pMatch = lambda l1, l2: all([x[0] == x[1] or x[0] == None for x in zip(l1, l2)]) 

# examples of partial matches
pMatch([1, 2, None], [1, 2, 3])                                                                                                                                                             
# True
pMatch([1, 2, 4], [1, 2, 3])                                                                                                                                                                
# False

new_list = [[1, 2, 3], [9, 1, 6], [7, 3, 4]]
l = [7, None, 4]

next(i for i in range(len(new_list)) if pMatch(l, new_list[i]))    
# 2

在一行中:

next(i for i in range(len(new_list)) if all([x[0]==x[1] or x[0]==None for x in zip(l, new_list[i])])) 
# 2

(假设所有列表的长度相同)


推荐阅读