Вы хотите перебрать копию english_words
, взяв ее копию с помощью english_words[0][:]
. Прямо сейчас вы перебираете тот же список, который вы модифицируете, что вызывает странное поведение. Таким образом, цикл for будет выглядеть как
for word in english_words[0][:]:
if len(word) < 4:
english_words[0].remove(word)
Также вы можете упростить свой первый цикл for с помощью списочного понимания, и вам не нужно переносить word_file.read().split()
в список, поскольку он уже возвращает список
Итак, ваш код будет выглядеть как
#load in the words from the original text file
def load_words():
with open('words_alpha.txt') as word_file:
#No need to wrap this into a list since it already returns a list
valid_words = word_file.read().split()
return valid_words
english_words = load_words()
#remove words under 4 letters using list comprehension
english_words = [word for word in english_words if len(word) >= 4]
print("done")
print(len(english_words))
#save the remaining words to a new text file
new_words = open("english_words_v3.txt","w")
for word in english_words:
new_words.write(word)
new_words.write("\n")
new_words.close()