如何在python中将列表与另一个列表匹配
我想在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
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处给出相同的结果,您是否希望模式中的字符串包含在长列表
的字符串中,或者您希望长列表
中的字符串以模式中的任何字符串开头?对于当前示例,两者给出相同的结果。