2017-03-16 209 views
1

因此,我有兩個字符串列表。這些字符串由一個或多個不同字符的分類組合形成。字符不是全部在字母表中,但給出。假設所有可能的字符都是[A,B,C,D,E],那麼這兩個列表就是這些元素的組合(在這種情況下從1到5)。檢查字符串列表中的字符子集是否包含在另一個字符串列表中

實施例:

list1 = [AB, AB, C] 
list2 = [ABC, CD, ABCDE, E] 

沒有定義在每個列表中的元素的數量,但範圍可以從1至30,與一般的情況下爲10左右。

現在,我想是以確定list1中每個字符串中是否至少存在一個唯一字符組合,這些字符在list2中也存在,無論順序如何。在本例中,[A,C,A,E]包含在list2中[A,A,C]。

我發現做到這一點的天真方式是從每個列表中做出所有可能的1個字符組合,並查看是否至少存在一個list1包含在list2中的情況。但是,這可以成倍增長,因爲10個元素的5個字符的字符串列表的所有可能的組合可能是巨大的(這只是一般情況)。

我想過使用正則表達式或類似的東西,但我真的沒有想象出更有效的解決方案。

我正在爲此使用Python。以防萬一,因爲現有的解決方案或庫是相關的。

謝謝你的幫助!

+0

因此,對於每個列表,你想建立組合中的每個元素來自列表中的單獨項目的組合?列表中的項目是否可以不參與組合? (即你的例子中的'list1'是否包含'{A,C}'?) –

+0

對於第一個問題是的。該組合由列表中每個字符串的一個(且只有一個)元素組成。我不明白第二個問題。我想從'list2'中找到至少一個組合中來自'list1'的組合 – crscardellino

回答

5

這可能是集合操作的主要候選者。讓我們看看你的例子(注意,我們需要添加引號來使它們成爲字符串)。

list1 = ["AB", "AB", "C"] 
list2 = ["ABC", "CD", "ABCDE", "E"] 

如果我們想要一組與來自list1list2

print(set(list1) | set(list2)) 
#OUTPUT: {'C', 'AB', 'ABCDE', 'CD', 'ABC', 'E'} 

如果我們要檢查哪些元素是常見的兩種list1list2(如果我們加上「C」的獨特元素到list2我們將有一個輸出{'C'}否則,沒有共同的元素共享,導致一個空的set()

print(set(list1) & set(list2)) 
#OUTPUT: set() 

如果我們希望是在list1的元素,但不是在list2

print(set(list1) - set(list2)) 
#OUTPUT: {'C', 'AB'} 

如果我們想要一組與那些無論是在list1list2

print(set(list1)^set(list2)) 
#OUTPUT: {'E', 'CD', 'AB', 'ABC', 'C', 'ABCDE'} 

元素欲瞭解更多信息,您可以檢查out https://docs.python.org/2/library/sets.html

我希望這有助於!

相關問題