[英]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.