检查一个列表中的任何字符串是否是另一个列表中的子字符串

McL*_*odx -2 python

我知道如果我只有两个字符串,那么检查 usingx in y就可以了。如果我只是想检查一个字符串是否在列表中的任何字符串中,我只需使用循环即可for

但是,检查第一个列表中的任何字符串是否是第二个列表中的字符串的子字符串的最Pythonic /有效的方法是什么?

一个例子是:

notPresent = []
present = []
listA = ['Rick', 'James']
listB = ['Rick', 'Ricky', 'Ryan', 'Jam', 'Jamesses', 'Jamboree']

notPresent = ['Ryan', 'Jam', 'Jamboree']
present = ['Rick', 'Ricky', 'Jamesses']
Run Code Online (Sandbox Code Playgroud)

我将同时使用present和两个notPresent词。

Mos*_*oye 6

您可以通过理解来做到这any一点set

listA = ['Rick', 'James']
listB = ['Rick', 'Ricky', 'Ryan', 'Jam', 'Jamesses', 'Jamboree']

present = {i for i in listB if any(j in i for j in listA)}
notPresent = set(listB) - present  # difference of two sets 

print(present)
# {'Rick', 'Ricky', 'Jamesses'}

print(notPresent)
# {'Jamboree', 'Ryan', 'Jam'}
Run Code Online (Sandbox Code Playgroud)

any有助于避免在找到匹配项后运行整个迭代长度,并且您可以从第一个set匹配项生成互补集。notPresent