2017-03-16 158 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

我希望这有助于!

相关问题