我试图看看是否可以使用列表推导更好地编写此代码 可以说我有以下列表:
a_list = [
'HELLO',
'FOO',
'FO1BAR',
'ROOBAR',
'SHOEBAR'
]
regex_list = [lambda x: re.search(r'FOO', x, re.IGNORECASE),
lambda x: re.search(r'RO', x, re.IGNORECASE)]
我基本上想要将regex_list
中没有任何匹配的所有元素添加到另一个列表中。
E.g。 ==>
newlist = []
for each in a_list:
for regex in regex_list:
if(regex(each) == None):
newlist.append(each)
如何使用列表推导来完成此操作?它甚至可能吗?
答案 0 :(得分:18)
当然,我认为应该这样做
newlist = [s for s in a_list if not any(r(s) for r in regex_list)]
编辑:经过仔细检查,我注意到您的示例代码实际上将a_list
中与 all 不匹配的每个字符串添加到新列表中正则表达式 - 而且,它为每个不匹配的正则表达式添加每个字符串一次。我的列表理解符合我的意思,即每个字符串只添加一个与正则表达式任何不匹配的副本。
答案 1 :(得分:0)
我将你的代码解决了这个问题:
a_list = [
'HELLO',
'FOO',
'FO1BAR',
'ROOBAR',
'SHOEBAR'
]
regex_func = lambda x: not re.search(r'(FOO|RO)', x, re.IGNORECASE)
然后你有两个选择:
过滤
newlist = filter(regex_func, a_list)
列表理解
newlist = [x for x in a_list if regex_func(x)]