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

时间:2021-04-29 13:23:58

标签: python json string function

我想在 python 中找到另一个列表值的第一个列表值,在那里我也使用了 matchsetfindall 其他方法,但它在我的代码中效果不佳。< /p>

这里我想匹配 patternlonglist 中并且模式总是 startwith。

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 循环迭代和最快的性能?

1 个答案:

答案 0 :(得分:2)

您可以使用带有 any 的列表推导式,如果找到匹配项,它会短路内循环。

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

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

相关问题