[英]Filter list of strings using list comprehension
>>> li = ["a b self", "mpilgrim", "foo c", "b", "c", "b", "d", "d"]
>>> condition = ["b", "c", "d"]
>>> [elem for elem in li if elem in condition]
['b', 'c', 'b', 'd', 'd']
但是有沒有辦法返回
['a b self','foo c','b', 'c', 'b', 'd', 'd']
由於 b 和 c 包含在'ab self'
和'foo c'
,我希望代碼也返回這兩個。
假設代碼需要檢索包含任何條件字符串的所有字符串:
[elem for elem in li if any(c in elem for c in condition)]
如果需要完全匹配條件:
[elem for elem in li if
any(re.search('(^|\s){}(\s|$)'.format(c), elem) for c in condition)]
編輯:這可以簡化為單個預定義的正則表達式:
predicate = re.compile('(^|\s)({})(\s|$)'.format('|'.join(condition)))
[elem for elem in li if predicate.search(elem)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.