如何测试另一个列表中是否存在多个字符串?下面是我开始使用但无法正常工作的代码示例。如果在列表中找到了部分字符串,它应该返回true。
我在评论中标记了结果应返回的内容。你可以看到他们都失败了。
def all_exist(avalue, bvalue):
if avalue == []:
return True
else:
print (all(x in avalue for x in bvalue))
items = ['greg','krista','marie']
all_exist(['greg', 'krista'], items) # true
all_exist(['gre', 'kris'], items) # true
all_exist(['gre', 'purple'], items) # false
将第二个列表转换为单个字符串然后只测试列表中是否存在字符串会更好吗?
答案 0 :(得分:6)
您必须检查第一个列表中的 所有 字符串是否包含在 任何 字符串中第二个清单:
def all_exist(avalue, bvalue):
return all(any(x in y for y in bvalue) for x in avalue)
items = ['greg','krista','marie']
print(all_exist(['greg', 'krista'], items)) # -> True
print(all_exist(['gre', 'kris'], items)) # -> True
print(all_exist(['gre', 'purple'], items)) # -> False
print(all_exist([], items)) # -> True
答案 1 :(得分:0)
我们希望循环遍历avalue
中的元素,并检查此元素是否位于bvalue
中的任何字符串中。但我们希望在all
内执行所有操作,因为我们要检查all
中的avalue
元素是否匹配。
另外,如果我们以这种方式进行测试,那么空avalue
将返回True
,因此我们不需要告诉Python明确地执行此操作。
请注意:由于您已将all_exist
定义为function
,因此它应该return
一个值,而不是print
结果,所以我已更改适合你:
def all_exist(avalue, bvalue):
return all(any(i in j for j in bvalue) for i in avalue)
并且一些测试表明它有效:
>>> all_exist(['greg', 'krista'], items) # true
True
>>> all_exist(['gre', 'kris'], items) # true
True
>>> all_exist(['gre', 'purple'], items) # false
False