#python-3.x #list
#python-3.x #Список
Вопрос:
Я хочу удалить повторяющиеся слова из текстового файла и записать новый файл. Я сначала сортирую W1.txt а затем пытается удалить повторяющиеся слова и поместить их в новый текстовый файл под названием W1.txt .
Однако мой код застревает, и вывода нет. Ошибки отладки не было.
with open("W1.txt") as f2:
W = sorted(word.strip(",") for line in f2 for word in line.split())
newList = []
for item in W:
unique = True
current = W.pop()
for string in W:
if current in string:
unique = False
if unique:
newList.append(current)
W.insert(0, current)
with open('W.txt', 'w') as filehandle:
for listitem in newList:
filehandle.write('%sn' % listitem)
Комментарии:
1. используйте dict и проверьте, есть ли там слово или нет.
Ответ №1:
РЕДАКТИРОВАТЬ: если вы хотите сохранить метод, который у вас есть, с присвоением уникальной переменной, вот код:
ТАКЖЕ БУДЬТЕ ОСТОРОЖНЫ С ОТСТУПОМ. Строка после оператора with содержит 4 пробела / 1 табуляцию, и после того, как вы закончите открывать файл, следующая строка не имеет отступов. То же самое с операторами for и if, после того, как вы закончите с циклом или условием, удалите отступ для следующей строки.
with open("W1.txt") as f2:
W = sorted(word.strip(",") for line in f2 for word in line.split())
newList = []
for item in W:
unique = True
current = W.pop()
# you want to check if the current item is in newList not if it exists in W
if current in newList:
unique = False
if unique:
newList.append(current)
W.insert(0, current)
with open('W.txt', 'w') as filehandle:
for listitem in newList:
filehandle.write('%sn' % listitem)
Ваш второй цикл выполняется бесконечно, поскольку вы продолжаете добавлять к нему с помощью функции W.insert() .
Если вы хотите использовать циклы, используйте первый бит кода:
Что вы хотите сделать, это проверить, есть ли элемент уже в вашем новом списке. Если это так, вы пропускаете его, если это не так, вы добавляете к нему.
Что-то вроде этого:
with open("W1.txt") as f2:
W = sorted(word.strip(",") for line in f2 for word in line.split())
newList = []
for item in W:
# check if the item that you are looping through is already in your list
if item in newList:
# if the item exists then skip to the next item
continue
else:
# the item is not in your list so add it in
newList.append(item)
with open('W.txt', 'w') as filehandle:
for listitem in newList:
filehandle.write('%sn' % listitem)
Если вам нужен более быстрый способ сделать это, существует встроенная функция set, которая удаляет все дубликаты и возвращает кортеж:
with open("W1.txt") as f2:
W = sorted(word.strip(",") for line in f2 for word in line.split())
remove_duplicates = set(W)
newList = list(remove_duplicates) # set returns a tuple and if you want a list use this
with open('W.txt', 'w') as filehandle:
for listitem in newList:
filehandle.write('%sn' % listitem)
Комментарии:
1. Спасибо. Я новичок в Python, и это действительно полезно.