0

1 つのリストを別のストップ リストでフィルタリングする素晴らしい pythonic の方法を探していますが、最初に 2 番目のリストの部分文字列を一致させたいと考えています。

具体的には、次のような URL の list1 と list2 があります。

['microsoft.com', 'ibm.com', 'cnn', '.ru'] etc

URL の最初のリストは巨大 (数千項目) で、2 番目のリストは 500 から 1000 のように小さくなります。しかし、2 番目のリスト項目は部分文字列検索として使用する必要があるため、「in」またはセットを使用した単純な一致では十分ではありません。私が考えることができるのは2つの「for」ループだけですが、それらはpythonicではないようです:)

PS目的は、一致したアイテムを最初のリストから削除することです。

4

2 に答える 2

3

照合する文字列から単一の論理和正規表現を作成しsearch、RE オブジェクトのメソッドを使用して照合を行うことができます。re.escapeRE に貼り付ける前に、必ず文字列を確認してください。

>>> import re
>>> substrings = ['microsoft.com', 'ibm.com', 'cnn', '.ru']
>>> pattern = "(?:%s)" % "|".join(map(re.escape, substrings))
>>> print(pattern)
(?:microsoft\.com|ibm\.com|cnn|\.ru)
>>> pattern = re.compile(pattern)
>>> [x for x in ["www.microsoft.com", "example.com", "foo.ru"]
...    if not pattern.search(x)]
['example.com']
于 2012-04-24T09:53:42.767 に答える
0

これはあなたが期待したことですか?

one=['microsoft.com', 'ibm.com', 'cnn', '.ru']
two=['.com']
filtered=[o for o in one for t in two if o.find(t)!=-1]
于 2012-04-24T09:56:21.467 に答える