".".join(s.split()) берет строку s, разделяет её на список слов по пробельным символам (s.split()), а затем соединяет эти слова обратно в строку, используя точку (.) в качестве разделителя.  Иными словами, оно удаляет лишние пробелы из строки и заменяет все пробелы на точки.
Выражение ".".join(s.split()) преобразует строку s, удаляя лишние пробелы и заменяя все оставшиеся пробелы на точки. Разберем по частям:
s.split(): Этот метод разделяет строку s на список подстрок, используя пробелы как разделители.  Важно отметить, что он удаляет все начальные, конечные и дублирующиеся пробелы между словами. Если в строке несколько пробелов подряд, split() обработает их как один разделитель.  Если аргумент не указан (как в данном случае), то по умолчанию разделителем считается любой пробельный символ (пробел, табуляция, перенос строки и т.д.).
    ".".join(...):  Метод join() принимает список (или любой другой итерируемый объект) строк и объединяет их в одну строку, используя строку, вызвавшую этот метод (в данном случае - "."), как разделитель.  То есть, он вставляет точку между каждой подстрокой, полученной после s.split().
    Пример:
Пусть s = "  Hello   world!  "
s.split() вернет ['Hello', 'world!'] (заметим, что начальные, конечные и внутренние дублирующиеся пробелы были удалены).".".join(['Hello', 'world!']) вернет "Hello.world!"Итог: Выражение удаляет все лишние пробелы из строки и заменяет все оставшиеся пробелы на точки, создавая новую строку.