Действительно, вместо этого используйте Counter
:
from collections import Counter
lst = ['elle','household','lel','bye']
double_l = [word
for word in lst
for c in [Counter(word)]
if c['l'] == 2]
print(double_l)
# ['elle', 'lel']
Если вы настаиваете (почему?), Вот как вы «рассчитываете» регулярные выражения:
^(?:[^l]*l){2}[^l]*$
Этот блестящий фрагмент кода говорит:
^ # bound the expression to the start
(?:[^l]*l){2} # not an l, followed by an l, two times
[^l]* # no l thereafter
$ # the end
См. демонстрацию на regex101.com .