Строка, растущая в цикле
Почему s += кусок в цикле стоит заменить на "".join и когда это действительно важно.
Как обычно пишут
itog = ""
for slovo in slova:
itog += slovo + " "
Работает. Но есть два «но», и второе важнее первого.
Первое: лишний хвост
После цикла в конце остаётся пробел, и его приходится убирать
strip. С join такой заботы нет: разделитель ставится между
кусками, а не после каждого.
itog = " ".join(slova)
Второе: строка неизменяема
В Python строку нельзя изменить. itog += slovo не дописывает к
существующей строке — он создаёт новую и копирует в неё всё
предыдущее.
На десяти словах это незаметно. На десяти тысячах программа копирует всё написанное ранее десять тысяч раз.
# 50 000 кусков
itog = ""
for kusok in kuski:
itog += kusok # заметно медленно
itog = "".join(kuski) # мгновенно
Если куски не строки
join работает только со строками. Числа придётся превратить:
", ".join(str(n) for n in nomera)
Когда плюс уместен
Когда кусков два-три и они известны заранее. imya + " " + familiya
читается нормально, и городить join ради него незачем.
Правило простое: цикл — повод для join. Вне цикла плюс не
проблема.