对不起标题,真的想不出一个简单的方法来解释这种情况。
所以,如果我有一个字符串列表,例如:
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”)但这不是一个问题(我在最后的内容中执行此操作)所有“声明”。
我的方法很有效,但在我看来它非常混乱(尤其是因为我称之为临时性,使其可能不清楚是什么。我想我可以将它们重命名为其他东西,但我可以从头到尾我们没有想到任何有意义的东西,而且我不确定它的效率是多少。
还有另一种方法可以达到这个目的吗?
很抱歉,如果我没有解释好这个!如果有任何需要澄清的话,请告诉我。
答案 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=True
和x=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)
我希望这是你想要做的。