正規表現に基づいてリスト内の文字列をフィルタリングしたい。
より良いものはあり[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])