如何在python中将列表与另一个列表匹配

如何在python中将列表与另一个列表匹配,python,json,string,function,Python,Json,String,Function,我想在python中找到另一个列表值的第一个列表值,在这里我使用了match和set和findall其他方法,但在我的代码中效果不佳 在这里,我想匹配模式在长列表中并且模式总是从第二个开始 pattern = ['aaa','bbbb','ccc'] longlist = ['aaa845','bbbbPP44','XXX10','aaa420','ccc1','jjj7000','PPPP'] for i in longlist: # longlist is json data, So

我想在python中找到另一个列表值的第一个列表值,在这里我使用了
match
set
findall
其他方法,但在我的代码中效果不佳

在这里,我想匹配
模式
长列表中
并且模式总是从第二个开始

pattern  = ['aaa','bbbb','ccc']
longlist = ['aaa845','bbbbPP44','XXX10','aaa420','ccc1','jjj7000','PPPP'] 

for i in longlist:  # longlist is json data, So this line required. After we can do it any code
  if filter(pattern.match, i): 
    print(i)

  # other tried
  if set(pattern) & set(longlist):
    print(i)
期望输出:
aaa845、bbpp44、aaa420、ccc1


有人能建议最好的编码风格,而不使用多个
,以实现
循环迭代和最快的性能吗?

您可以使用
任意
的列表理解,如果找到匹配项,则会使内部循环短路

这将检查模式中的任何单词是否“包含”在
longlist
的单词中

>>> pattern  = ['aaa','bbbb','ccc']
>>> longlist = ['aaa845','bbbbPP44','XXX10','aaa420','ccc1','jjj7000','PPPP']
>>> [i for i in longlist if any(j in i for j in pattern)]
['aaa845', 'bbbbPP44', 'aaa420', 'ccc1']
如果您希望
longlist
中的单词以模式中的任何单词“开头”,则需要这样更改条件

>>> [i for i in longlist if any(i.startswith(j) for j in pattern)]
['aaa845', 'bbbbPP44', 'aaa420', 'ccc1']

在您给定的示例中,两者恰好产生相同的结果。

仍然不确定OP是希望
中还是
开始使用
检查。您是对的,
i.startswith(j)
也可以在@timgebd处给出相同的结果,您是否希望
模式中的字符串包含在
长列表
的字符串中,或者您希望
长列表
中的字符串以模式中的任何字符串开头?对于当前示例,两者给出相同的结果。