У меня есть функция, чтобы выбрать комки из списка строк и вернуть их в виде другого списка:
def filterPick(lines,regex):
result = []
for l in lines:
match = re.search(regex,l)
if match:
result += [match.group(1)]
return result
Есть ли способ переформулировать это как понимание списка? Очевидно, это довольно ясно, как есть; просто любопытно.
Спасибо тем, кто внес свой вклад, особое упоминание для @Alex. Вот сжатая версия того, чем я закончил; метод сопоставления с регулярным выражением передается в filterPick в качестве параметра «pre-hoisted»:
import re
def filterPick(list,filter):
return [ ( l, m.group(1) ) for l in list for m in (filter(l),) if m]
theList = ["foo", "bar", "baz", "qurx", "bother"]
searchRegex = re.compile('(a|r$)').search
x = filterPick(theList,searchRegex)
>> [('bar', 'a'), ('baz', 'a'), ('bother', 'r')]