检查字符串列表中的字符子集是否包含在另一个字符串列表中

时间:2017-03-16 02:08:20

标签: python string list combinations

所以我有两个字符串列表。这些字符串由一个或多个不同字符的排序组合形成。字符不是全部在字母表中,而是给出。

假设所有可能的字符都是[A,B,C,D,E],那么这两个列表就有这些元素的组合(在这种情况下从1到5)。

示例:

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

每个列表中的元素数量未定义,但范围从1到30,一般情况大约为10.

现在,我想知道的是list1中每个字符串是否至少有一个唯一字符组合,list2中也存在,无论顺序如何。在示例中,[A,A,C]包含在list2中[A,C,A,E]。

我发现这样做的天真方式是从每个列表中执行所有可能的1个字符组合,并查看是否存在list1中包含list2的至少一个案例。但是这可能呈指数级增长,因为10个字符的5个字符串列表的所有可能组合都可能很大(这只是一般情况)。

我曾想过使用正则表达式或类似的东西,但我真的没有想到更有效的解决方案。

我正在使用Python。以防万一是因为现有的解决方案或库。

感谢您的帮助!

1 个答案:

答案 0 :(得分: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'}

有关详细信息,请查看https://docs.python.org/2/library/sets.html

我希望这有帮助!