正規表現に基づいてリスト内の文字列をフィルタリングしたい。
より良いものはあり[x for x in list if r.match(x)]ますか?
回答:
次を使用して、Python3.xでイテレータを作成するかPython2.xでリストを作成できます。
filter(r.match, list)
Python 3.xイテレータをリストに変換するには、キャストするだけです。list(filter(..))。
filterバージョンは完全にクリアで、ノイズがはるかに少なくなります。
r.matchここは何ですか?
r.matchは、指定された文字列に適用されると、正規表現がrその文字列と一致するかどうかを検出するメソッドです(一致する場合は、対応する一致オブジェクトを返しますが、この場合は、結果が正しいかどうかだけを気にするため、問題ではありません)。
完全な例(Python 3):
Python 2.xについては、以下の注を参照してください
import re
mylist = ["dog", "cat", "wildcat", "thundercat", "cow", "hooo"]
r = re.compile(".*cat")
newlist = list(filter(r.match, mylist)) # Read Note
print(newlist)
プリント:
['cat', 'wildcat', 'thundercat']
注意:
Python 2.x開発者の場合、filterすでにリストを返します。でPythonの3.xのfilterそれに変換されなければならないので、イテレータを返すように変更されたlist(それがうまくプリントアウトを参照するために)。
strので、私も削除しましたfilterが、
print(list(newlist))かprint([i for i in newlist])