文字列のリストから引き出そうとしている名前のリストがあります。部分一致などの誤検知が続いています。もう1つの注意点は、該当する場合は姓も取得したいということです.
names = ['Chris', 'Jack', 'Kim']
target = ['Chris Smith', 'I hijacked this thread', 'Kimberly','Christmas is here', 'CHRIS']
desired_output = ['Chris Smith', 'Kimberly', 'CHRIS']
私はこのコードを試しました:
[i for e in names for i in target if i.startswith(e)]
これにより、予想通り、Chris Smith、Christmas is here、Kimberly が返されます。
これにどのようにアプローチするのが最善ですか?正規表現を使用していますか、それともリスト内包表記で行うことができますか? 実名リストは最大 880,000 名の長さであるため、パフォーマンスが問題になる場合があります。
(パイソン2.7)
編集:クリスマスを除外しながらキンバリーを含めたいという不可能な要求がここにあることを考えると、この例の私の基準は非現実的であることに気付きました. この問題を軽減するために、バリエーションを含むより完全な名前のリストを見つけました (Kim と Kimberly の両方が含まれています)。