2017-03-01 82 views
0

我需要比较单个列表中的元素。比如这里有我的两个列表:比较两个不同大小的列表列表

listing = [['tl.48', 'tl.49', 'tl.57'], ['tl.23', 'tl.45', 'tl.12']]; 
search = [['tl.48','tl.57']]; 

我现在的目标是寻找每个项目寻找到每个项目列表,如果两个项目'tl.48''tl.57'在再上市相匹配的项目,我选择从该项目列表并将其附加到空列表中。 listing[0]具有3个元素的尺寸,并且search[0][0]search[0][1]存在于listing[0][0]listing[0][2]。我怎样才能得到listing[0]在一个单独的列表并追加它。如果listing[0]的大小为4,并且search[0][0]search[0][1]出现在listing[0]中,我仍然会将listing[0]添加到新列表中。我该怎么做?

谢谢。

+1

我发现你的描述难以遵循。如果你给出了预期的输出结果,可能会更容易... –

+0

追加只是用'my_list.append(my_new_element)'完成的。那么这有什么问题? – Julien

回答

1
[lst for lst in listing if all([True if term in lst else False for term in search[0]])] 

结果:[['tl.48', 'tl.49', 'tl.57']]

此,对于每个listinglist,检查每一个搜索词是inlist,只有追加,如果all这些条款的存在。

注意:搜索是包含单个列表的列表,这就是我们使用search[0]的原因。如果它只是元素列表,请改为使用search

大致相当于(相同的结果,不同的方法):

result = [] 
for lst in listing: 
    valid = True 
    for term in search[0]: 
     if term not in lst: 
      valid = False 
    if valid: 
     result.append(lst) 

如果这将是真实的目录比较(其中searchlisting是列表的两个列表),你需要找到一个更强大的解决方案

+0

你可以简化第一行'all(搜索[0]中的术语lst) –