检查“部分”字符串列表是否在完整字符串列表中

时间:2015-09-18 13:45:58

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

对不起标题,真的想不出一个简单的方法来解释这种情况。

所以,如果我有一个字符串列表,例如:

list_1 = [ "cat", "rat", "mat" ]

我如何检查所有这些字符串是否在另一个列表中可能有“绒毛”(我的意思是,而不是说“cat”它可能有“cat_mittens”,这可能会很好,但是“car_mittens” “不是。”

例如:

list_A = [ "cat", "car", "cab" ]
list_B = [ "cat", "rat", "bat", "mat" ]
list_C = [ "cat_mittens", "rat", "mat" ]

在这里,如果我对list_A做了分析,我想要返回False,对于list_B我想要True返回,同样对list_C我想要True返回(因为它包含列表A的所有3个字符串,即使“cat”周围有额外的位(我称之为绒毛)。

我目前的做法是:

list_1 = [ "cat", "rat", "mat" ]
list_C = [ "cat_mittens", "rat", "mat" ]

temp_list = [False,] * 3

count = 0
for temp_1 in list_1:
  temp_list[ count ] = any( temp_1 in temp_2 for temp_2 in list_C )
  count += 1

result = all( temp_list )

还有一个复杂的问题,在我的实际代码中,列表C中的所有字符串都需要包含一个额外的字符串(例如,所有字符串都需要说“_filetype”)但这不是一个问题(我在最后的内容中执行此操作)所有“声明”。

我的方法很有效,但在我看来它非常混乱(尤其是因为我称之为临时性,使其可能不清楚是什么。我想我可以将它们重命名为其他东西,但我可以从头到尾我们没有想到任何有意义的东西,而且我不确定它的效率是多少。

还有另一种方法可以达到这个目的吗?

很抱歉,如果我没有解释好这个!如果有任何需要澄清的话,请告诉我。

4 个答案:

答案 0 :(得分:4)

def check_all(substrings, strings):
    """Check all *substrings* are in *strings*."""
    return all(any(substr in s for s in strings) for substr in substrings)

示例:

>>> list_1 = [ "cat", "rat", "mat" ]
>>> list_A = [ "cat", "car", "cab" ]
>>> list_B = [ "cat", "rat", "bat", "mat" ]
>>> list_C = [ "cat_mittens", "rat", "mat" ]
>>> check_all(list_1, list_A)
False
>>> check_all(list_1, list_B)
True
>>> check_all(list_1, list_C)
True
>>> check_all(list_1, ["ratcatmat"])
True
>>> check_all(["bc", "ab"], ["abc"])
True

答案 1 :(得分:2)

你不必将结果保存在列表中,你可以

result = True
for s in list_1:
    result &= any(s in test_string for test_string in list_C)
print result

如果您这样做,可以提高效率(但不太干净):

def check(list_1, list_2):
    for s in list_1:
        if not any(s in test_string for test_string in list_C):
            return False
    return True

编辑:

& =语法只对两个变量执行AND操作

所以这个

x &= y

等同于此

x = x & y 

只有当x和y都为真时,x才会为真

所以如果y=Truex=True那么结果将为True,但是如果例如y=False则结果将为False

答案 2 :(得分:0)

count = 0
for item in list_1:
    for item2 in list_C:
        if item in item2:
            count += 1
            break
res = 'True' if count==len(list_1) else 'False'
print res

答案 3 :(得分:0)

您可以在python3中执行此操作。这应该打印出所需的结果。

list_1 = [ "cat", "rat", "mat" ]
list_2 = [ "cat_mittens", "rat", "mat" ]

for i in list_2:
    for j in list_1:
         if j in i:
            print(i) 

我希望这是你想要做的。