Фильтровать строки, в которых n равно символам в строке

Есть ли способ фильтровать эти строки из списка строк, который содержит, например, 3 одинаковых символа в строке? Я создал метод, который может это сделать, но мне любопытно, есть ли более пифонический способ или более эффективный или более простой способ сделать это.

list_of_strings = [] def check_3_in_row(string): for ch in set(string): if ch*3 in string: return True return False new_list = [x for x in list_of_strings if check_3_in_row(x)] 

EDIT: Я только что нашел одно решение:

 new_list = [x for x in set(keywords) if any(ch*3 in x for ch in x)] 

Но я не уверен, какой путь быстрее – regexp или this.

Вы можете использовать регулярное выражение, например

 >>> list_of_strings = ["aaa", "dasdas", "aaafff", "afff", "abbbc"] >>> [x for x in list_of_strings if re.search(r'(.)\1{2}', x)] ['aaa', 'aaafff', 'afff', 'abbbc'] 

Здесь . соответствует любому символу и записывается в группу ( (.) ). И мы проверяем, сохраняется ли один и тот же захваченный символ (мы используем backreference \1 для первой захваченной группы в строке) два раза ( {2} означает два раза).