Я учусь Python, и во время физических упражнений, я попал в эту ситуацию:расширения списка, используя цикл
words = ['one', 'two', 'three']
for w in words
if len(w) == 5:
words.insert(0,w)
Теперь, что произошло здесь в том, что в то время как петля итерации последнего слова и нашла совпадение, оно вставило новое слово в начале списка и продолжило цикл, когда длина списка увеличилась на 1. Это привело к бесконечному циклу.
Теперь я изменил код так:
words = ['one', 'two', 'three']
for w in words[:]
if len(w) == 5:
words.insert(0,w)
Результат был точно так, как я ожидал. В начале было добавлено только одно слово, и он вышел из цикла.
Может кто-нибудь объяснить, что именно происходило в первом коде?
Именно то, что вы уже сказали. –
Главное отличие состоит в том, что слова будут ссылаться на ваш исходный список, тогда как слова [:] возвращают> новый <список, который вы перебираете. Это означает, что вы не будете редактировать тот же список, который вы повторяете. – Dyrborg
Почему бы не сделать копию 'words' и сделать вставку под петлю? манипулирование списком в цикле, как правило, плохая идея. – Anzel