在列表中部分匹配

时间:2019-02-27 15:25:30

标签: python

if( ! $remote_db->check_connection(false) ){
    exit;
}

如果所有match1,match2,match3存在且在list1中匹配,则返回true。 list1中有白色字符串

list1 = ['  I am Sam', 'It is 1,2,3  ', ' It is hot right now' ]

match1 = 'I am'
match2 = 'is 1,2'
match3 = 'hot right now'

如果完全匹配,我可以返回,但是即使部分匹配,在列表中进行匹配的最佳方式是什么?

2 个答案:

答案 0 :(得分:1)

我不是100%肯定这是您想要做的,但我认为是:

list1 = ['  I am Sam', 'It is 1,2,3  ', ' It is hot right now' ]

match1 = 'I am'
match2 = 'is 1,2'
match3 = 'hot right now'


def check(the_list, *match):
    return all(any(w in p for p in the_list) for w in match)))

print(check(list1, match1, match2, match3))

您需要部分匹配,因此字符串不必相等,但是match必须是列表的子字符串。

答案 1 :(得分:1)

如果a in a_stringTrue的子字符串,则

a返回a_string。因此,您只需要解决列表理解问题,这将需要更复杂一些。

list1 = ['  I am Sam', 'It is 1,2,3  ', ' It is hot right now' ]

match1 = 'I am'
match2 = 'is 1,2'
match3 = 'hot right now'

def check(the_list, *match):
    return all(any(a in listel for listel in the_list) for a in match)

print(check(list1, match1, match2, match3))

如果所有匹配项都是True中至少一个字符串的子字符串,它将打印the_list。顺序并不重要,也不需要一对一的对应关系。我的意思是,如果所有match是同一个元素的子字符串,它仍然返回True。例如,如果您使用match1 = 'I am'match2 = 'am'match3 = ' I',它仍然会返回True