所以我有两个字符串列表。这些字符串由一个或多个不同字符的排序组合形成。字符不是全部在字母表中,而是给出。
假设所有可能的字符都是[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。以防万一是因为现有的解决方案或库。
感谢您的帮助!
答案 0 :(得分:5)
这可能是集合运营的主要候选者。让我们举个例子(注意,我们需要添加引号以使它们成为字符串)。
list1 = ["AB", "AB", "C"]
list2 = ["ABC", "CD", "ABCDE", "E"]
如果我们想要一个包含list1
和list2
print(set(list1) | set(list2))
#OUTPUT: {'C', 'AB', 'ABCDE', 'CD', 'ABC', 'E'}
如果我们要检查list1
和list2
中哪些元素是常见的(如果我们要添加" C"到list2
,我们就会有输出除{'C'}
之外,没有共享的共同元素导致空set()
)
print(set(list1) & set(list2))
#OUTPUT: set()
如果我们想要list1
但不在list2
print(set(list1) - set(list2))
#OUTPUT: {'C', 'AB'}
如果我们想要一个包含list1
或list2
print(set(list1) ^ set(list2))
#OUTPUT: {'E', 'CD', 'AB', 'ABC', 'C', 'ABCDE'}
有关详细信息,请查看https://docs.python.org/2/library/sets.html
我希望这有帮助!