2016-10-09 3 views
1

В Python мне нужно удалить почти все знаки препинания из списка, но сохранить периоды и запятые. Должен ли я создать функцию для этого или переменную? В основном я хочу удалить все символы, кроме букв (я уже преобразовал заглавные буквы в нижний регистр), а также периоды и запятые (и, возможно, апострофы).Удаление пунктуации/символов из списка с помощью Python за исключением периодов, запятых

#Clean tokens up (remove symbols except ',' and '.') 

def depunctuate() 
    clean_tokens = [] 

    for i in lc_tokens: 
     if (i not in [a-z.,]) 
     ... 

ответ

0
import string 

# Create a set of all allowed characters. 
# {...} is the syntax for a set literal in Python. 
allowed = {",", "."}.union(string.ascii_lowercase) 

# This is our starting string. 
lc_tokens = 'hello, "world!"' 

# Now we use list comprehension to only allow letters in our allowed set. 
# The result of list comprehension is a list, so we use "".join(...) to 
# turn it back into a string. 
filtered = "".join([letter for letter in lc_tokens if letter in allowed]) 

# Our final result has everything but lowercase letters, commas, and 
# periods removed. 
assert filtered == "hello,world" 
+0

Это не только удаляет ненужные символы (знаки препинания), но также и пробельные и не-ASCII-буквы, переворачивая слова типа «наивность» в «неф». – lenz

+0

Да, это разрешает только буквы ASCII и другие символы пунктуации. Это была моя интерпретация требований, но она сильно зависит от того, что имел в виду вопрошающий при использовании слова «буквы». Другой ответ имеет аналогичную проблему; он удаляет вещи в 'string.punctuation', но неясно, охватывает ли это все« символы », которые хотел бы удалить исходный вопросник. – smarx

+0

Вы правы, 'string.punctuation' также не имеет большого количества символов пунктуации, например. причудливые кавычки. Тем не менее, я думаю, что «буквы» и «знаки пунктуации» - довольно четко определенные категории (и на самом деле довольно легко проверить свойства символа Юникода). – lenz

2

Вы можете создать набор нежелательных пунктуации из string.punctuation - который обеспечивает строку, содержащую знаки препинания, а затем использовать список понимание отфильтровать письма, содержащиеся в наборе:

import string 

to_delete = set(string.punctuation) - {'.', ','} # remove comma and fullstop 
clean_tokens = [x for x in lc_tokens if x not in to_delete] 
+0

Спасибо. Похоже, это сработало как шарм. ^^ –