【问题标题】:How do i match list with another list in python我如何将列表与python中的另一个列表匹配
【发布时间】:2021-07-22 21:02:03
【问题描述】:

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

这里我想匹配patternlonglist 中并且模式总是以开头。

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

【问题讨论】:

  • 您希望pattern 中的字符串包含在longlist 的字符串中,还是您希望longlist 中的字符串以pattern 中的任何一个开头?对于当前示例,两者都给出相同的结果。

标签: python json string function


【解决方案1】:

您可以使用带有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 中的单词以 pattern 中的任何单词“开头”,那么您需要像这样更改条件。

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

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

【讨论】:

  • 仍然不确定 OP 是要in 还是startswith 检查。
  • 你是对的,i.startswith(j)也可以给出同样的结果@timgeb
猜你喜欢
  • 2021-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
相关资源
最近更新 更多