我想基于正则表达式过滤列表中的字符串。
有比这更好的东西[x for x in list if r.match(x)]
吗?
Answers:
您可以使用以下命令在Python 3.x中创建迭代器或在Python 2.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
(以便看到它很好地打印出来)。
print(list(newlist))
或print([i for i in newlist])