使用Python检查列表中是否存在多个字符串

时间:2017-12-02 20:55:18

标签: python

如何测试另一个列表中是否存在多个字符串?下面是我开始使用但无法正常工作的代码示例。如果在列表中找到了部分字符串,它应该返回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

将第二个列表转换为单个字符串然后只测试列表中是否存在字符串会更好吗?

2 个答案:

答案 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