繁体   English   中英

Python-检查元组列表中的项目组合

[英]Python - check for combination of items in list of tuples

我有两个元组列表:第一个(A)具有我要检查的值集。 第二个(B)具有要在A中存在的值的组合。

A = [(1, 2, 3), (6, 10, 8)]
B = [(5, 7, 9), (10, 6)]

如您所见,以下事实使检查变得复杂:-B元组可能比A元组短-B元组的长度可能不同-B元组中的值可能以不同于它们的顺序出现一个A元组-所有A元组都具有相同的长度,但是该长度不能预先确定

我想出的最好方法是做一些冗余:

bad_tuples = [tup for badtup in B for tup in A 
              if [baditem for baditem in badtup if baditem in tup]
              and len([baditem for baditem in badtup if baditem in tup]) == len(badtup)]
good_tuples = [tup for tup in A if tup not in bad_tuples]

我认为这可以完成工作,但我不喜欢在查找bad_tuples时必须重复相同的列表理解这一事实。 我还发现它很难阅读,因此容易出错。 那么,谁能想到一种更优雅/有效的方式来完成任务?

(如果重要的话,在我的应用程序中,A中可能有很多(但<100个)元组,而B中只有几个(<10个)元组。)

如果一个元组中的条目确实是唯一的,则它应该很简单:

[x for x in A if set(x) not in [set(y) for y in B]]

更新

根据评论,似乎应该排除所有A中的元组,而当​​一切都转换为集合时,B中的元组是子集。 所以是:

[x for x in A if not any([set(y).issubset(set(x)) for y in B])]

这应该工作。

for tup in B:
    if(tup in A):
        bad_tuples.append(tup)
    else:
        good_tuples.append(tup)

假设,元组元素的顺序是相关的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM