Удаление пунктуации в списках в Python

Создание программы Python, которая преобразует строку в список, использует цикл для удаления всех знаков препинания, а затем преобразует список обратно в строку и печатает предложение без знаков препинания.

punctuation=['(', ')', '?', ':', ';', ',', '.', '!', '/', '"', "'"]

str=input("Type in a line of text: ")

alist=[]
alist.extend(str)
print(alist)

#Use loop to remove any punctuation (that appears on the punctuation list) from the list

print(''.join(alist))

Это то, что у меня есть до сих пор. Я пытался использовать что-то вроде: alist.remove(punctuation), но получаю сообщение об ошибке вроде list.remove(x): x not in list. Сначала я не прочитал вопрос должным образом и понял, что мне нужно сделать это с помощью цикла, поэтому я добавил это в качестве комментария, и теперь я застрял. Однако мне удалось преобразовать его из списка обратно в строку.


person Community    schedule 16.10.2013    source источник
comment
Просто используйте replace или strip.   -  person    schedule 17.10.2013


Ответы (4)


import string
punct = set(string.punctuation)

''.join(x for x in 'a man, a plan, a canal' if x not in punct)
Out[7]: 'a man a plan a canal'

Объяснение: string.punctuation предопределено как:

'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'

Остальное понятное понимание. set используется для ускорения этапа фильтрации.

person roippi    schedule 16.10.2013
comment
Я бы вытащил set из genexp; в противном случае вы строите его для каждого x. - person DSM; 17.10.2013
comment
Просто чтобы понять, что значит pull the set out of the genexp ? Можете ли вы привести пример, пожалуйста? - person Kyrol; 25.08.2014
comment
@Kyrol см. ловушку set(). - person roippi; 25.08.2014
comment
Спасибо. Я программирую на Python несколько недель. ;) - person Kyrol; 25.08.2014

Я нашел простой способ сделать это:

punctuation = ['(', ')', '?', ':', ';', ',', '.', '!', '/', '"', "'"]
str = raw_input("Type in a line of text: ")

for i in punctuation:
  str = str.replace(i,"")

print str

Таким образом, вы не получите никакой ошибки.

person Ricardo    schedule 16.10.2013
comment
Он повторяет список много раз, что может раздражать для очень больших входных данных, но приятно. :) - person Chris Arena; 17.10.2013

Вот ответ о том, как токенизировать данные операторы с помощью python. версия Python, которую я использовал, — 3.4.4. Предположим, что у меня есть текст, который сохраняется как one.txt. затем я сохранил свою программу на Python в каталоге, где находится мой файл (например, one.txt). Ниже приведена моя программа на Python:

with open('one.txt','r')as myFile: str1=myFile.read() print(str1)# Это для печати заданных операторов со знаками препинания (до удаления знаков препинания) # Ниже приведен список знаки препинания, которые нам нужно удалить, добавьте еще, если я забыл пунктуацию = ['(', ')', '?', ':', ';', ',', '.', '!', '/ ', '"', "'"]
for i в знаках препинания: str1 = str1.replace(i," ") #чтобы сделать пустым место, где стоят знаки препинания. myList=[] myList.extend(str1. split(" ")) print (str1) #это для печати заданных утверждений без пробелов(после удаления знаков препинания) для i в myList: # print("____________") print(i,end='\n') print ("____________")

==============Далее я опубликую для вас, как удалить стоп-слова============ до тех пор, пока это не позволит вам прокомментировать, если это полезно. Спасибо

person Isayas Wakgari Kelbessa    schedule 04.01.2017

person    schedule
comment
Попробуйте использовать replace или strip - person ; 17.10.2013
comment
Я предположил, что это было для класса, где они должны были использовать цикл на основе вопроса - person megawac; 17.10.2013