MiddleДебаггингРедкоЕщё не отвечали
Почему этот цикл сборки строки медленный на больших данных?
Это работает, но на больших words интервьюер отметит сложность.
def join_words(words):
s = ""
for w in words:
s += w + " "
return s.strip()
Найдите и исправьте проблему с производительностью.
Строки неизменяемы, поэтому каждое s += ... строит совершенно новую строку — O(n²) для n слов, медленно на больших данных. Функционально верно, но сложность и есть ошибка. Решение: return ' '.join(words), что даёт O(n) и идиоматично.
- ✗Считать, что
+=на строке изменяет буфер на месте - ✗Винить хвостовой пробел или
stripвместо повторных выделений - ✗Микрооптимизировать конкатенацию вместо использования
join
- →Почему неизменяемость строк вынуждает новое выделение на каждое
+=? - →Когда
io.StringIOили список сjoinпредпочтительнее для сборки текста?