簡體   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