首页 > 解决方案 > 我如何将列表与python中的另一个列表匹配

问题描述

我想在python中找到另一个列表值的第一个列表值,我在其中使用matchandsetfindall其他方法,但它在我的代码中效果不佳。

在这里,我想匹配始终patternlonglistand 模式开头的那个。

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, bbbbPP44, aaa420, ccc1

谁能建议没有多次FOR循环迭代和最快性能的最佳编码风格?

标签: pythonjsonstringfunction

解决方案


如果找到匹配项,您可以使用列表推导来any使内部循环短路。

这将检查 pattern 中的任何单词是否“包含”在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']

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


推荐阅读