現在我通過映射一個新的列表來排除列表中的電子郵件,排除我不想要的東西。這看起來像:Python列表理解嵌套循環
pattern = re.compile('b\.com')
emails = ['[email protected]', '[email protected]', '[email protected]', '[email protected]']
emails = [e for e in emails if pattern.search(e) == None]
# resulting list: ['[email protected]', '[email protected]']
不過,現在我需要過濾掉多個域,所以我也需要被過濾掉域的列表。
pattern_list = ['b.com', 'c.com']
有沒有辦法做到這一點仍然在列表理解形式,或者我將不得不恢復到嵌套for循環?
注意:在@處分割字符串並且執行word[1] in pattern_list
將不起作用,因爲c.com
也需要趕上sub.c.com
。
我不喜歡列表理解是解決這個問題的最好方法 - 你可能可以做到,但是很麻煩。看看這個解決方案:http://stackoverflow.com/questions/19150208/python-search-regex-from-variable-inside-a-list – karthikr 2014-09-23 18:27:53
請注意,你現有的例子也將排除,例如'[email protected] '和'bob.com @ bob.com'。那是你要的嗎? – BrenBarn 2014-09-23 18:28:28
當你對列表解析進行列表解析時,通常最好使用生成器(將方括號改爲parens),它更高效地存儲內存並很好地鏈接在一起。 – Seth 2014-09-23 18:30:53