检查列表元素是否包含另一个列表的所有元素的有效方法

时间:2018-03-27 01:06:53

标签: python string python-3.x list-comprehension

我有一个名为strList的字符串列表,其中包含大约800,000-2,200,000个元素。每个元素包含大约100个字符。我有另一个名为findStrs的字符串列表,它通常包含少于5个元素(5到10个字符的字符串)。我想选择包含strList中所有元素的findStrs元素。我怎样才能在Python中有效地做到这一点?这是我如何做到这一点,但我想知道是否有更有效的解决方案使用列表理解来做到这一点:

finalStrList = []
for strr in strList:
    temp = []
    for findStr in findStrs:
        if findStr in strr:
            temp.append(findStr)
    if len(temp) == len(findStrs):
        finalStrList.append(str)
print(finalStrList)

我尝试设计一个基于列表理解的方法,但不出意外,它不起作用:

[strr for strr in strList if [findStr in strr for findStr in findStrs]]

2 个答案:

答案 0 :(得分:1)

作为评论部分中提到的juanpa.arrivillaga,我可以使用以下基于列表理解的解决方案轻松完成我想做的事情:

[s for s in strList if all([x in s for x in findStrs])]

答案 1 :(得分:0)

如果匹配率不是很高,我们可以减少时间复杂度。

finalStrList = []
for strr in strList:
    flag = True
    for findStr in findStrs:
        if findStr not in strr:
            flag = False
            break
    if flag:
        finalStrList.append(str)
print(finalStrList)