Я уже слышал пару раз, что вы не должны выполнять конкатенацию строк в цикле for, поскольку строки неизменяемы и поэтому вычисляют конкатенацию как новый экземпляр строки, а затем переназначают идентификатор. Таким образом, если результат имеет п символов временная сложность будет O (N^2)Строка Python Конкатенация в длинные строки цикла
Bad: работает в O (N^2)
letters = ""
for c in document:
if c.isalpha():
letters += c
Хорошо: работает в O (п)
document = ""
temp = []
for c in document:
if c.isalpha():
temp.append(c)
letters = "".join(temp)
в то же время я читал, что
«Некоторые более поздние реализации функций Python-интерпретатор разработал оптимизацию, позволяющую завершить такой код в линейном времени ... »
Итак, первое решение должно быть прекрасным? Это оптимизация, которая находится в последних версиях python?
Большинство питонистов будет использовать понимание: 'letters = '' .join ([c для c в документе, если c.isalpha()])' – wim
@StefanPochmann жаль, что мои плохие буквы должны быть вне цикла. скопируйте ошибку патча. Исправлены оба фрагмента. – user1767754
@ user1767754 В первой строке все еще есть синтаксическая ошибка в первой строке. И странный комментарий. –