問題の説明が期待される出力と一致しません。「サブ文字列」と言いますが、期待される出力31
には、のサブ文字列であっても含まれていませんasasa1311
。これを行う1つの方法は次のとおりです。
>>> e = ["2311","1441","31","233122"]
>>> r = ["asasa2311","dadewr1441","app"]
>>> [eelem for relem in r for eelem in e if eelem in relem]
['2311', '31', '1441']
または、期待される出力が必要な場合:
>>> e = ["2311","1441","31","233122"]
>>> r = ["asasa2311","dadewr1441","app"]
>>> [eelem for relem in r for eelem in e if relem.endswith(eelem)]
['2311', '1441']
または、最初の一致でブレークアウトするのをもう少し効率的にしたい場合は、ジェネレーターアプローチを使用します。
>>> e = ["2311","1441","31","233122"]
>>> r = ["asasa2311","dadewr1441","app"]
>>> [eelem for eelem in e if any(r if eelem in relem else False for relem in r)]
['2311', '1441', '31']
in
または、ブール値を返すという事実を使用する場合は、もう少し短くします。
>>> [eelem for eelem in e if any(eelem in relem for relem in r)]
['2311', '1441', '31']