2013-04-17 14 views

Odpowiedz

14

Naprawdę prosta implementacja jest:

out = "".join(c for c in asking if c not in ('!','.',':')) 

i dodajemy żadnych innych rodzajów znaków interpunkcyjnych.

Bardziej skutecznym sposobem byłoby

import string 
stringIn = "string.with.punctuation!" 
out = stringIn.translate(stringIn.maketrans("",""), string.punctuation) 

Edit: Jest kilka dyskusji na temat efektywności wdrożeń i innych tutaj: Best way to strip punctuation from a string in Python

+1

'strip()' nie będzie działać. Zobacz http://docs.python.org/2/library/stdtypes.html#str.strip –

+0

@BrendenBrown Naprawdę masz rację. Pół roku bez patrzenia na pytona i co wiesz. Wstydliwa edycja. –

+0

Do usunięcia możesz uprościć ostatni wiersz do 'out = stringIn.translate (None, string.punctuation)' (zobacz https://docs.python.org/2/library/stdtypes.html#str.translate) – asmaier

0

Działa to, ale mogą istnieć lepsze rozwiązania.

asking="hello! what's your name?" 
asking = ''.join([c for c in asking if c not in ('!', '?')]) 
print asking 
+0

Nie potrzebujesz wewnętrznej listy w tym scenariuszu, a to spowoduje zwrócenie '' hellowhat'sychourname''. –

+0

@BurhanKhalid Twoja prawidłowa lista wewnętrzna nie jest potrzebna, ale wynik jest poprawny. –

0

Gazy nie będzie działać. Usuwa tylko początkowe i końcowe instancje, nie wszystko w dniach: http://docs.python.org/2/library/stdtypes.html#str.strip

zabawy z filtrem:

import string 
asking = "hello! what's your name?" 
predicate = lambda x:x not in string.punctuation 
filter(predicate, asking) 
+0

. Ważne jest, aby owinąć 'list()' wokół całej funkcji 'filter()', jeśli używasz Pythona 3.x, ponieważ wiele wbudowanych funkcji nie zwraca już 'list', ale specjalnych obiektów' iterable'. Wydaje się też, że przeoczyłeś wstawianie 'input' (lub' raw_input' dla Python 2.x) wokół napisu w drugiej linii i powinieneś umieścić coś w rodzaju 'asking = ...' dla ostatniej linii. – SimonT

+1

Wygląda na to, że to podejście jest odradzane w 3.x: http://stackoverflow.com/questions/13638898/how-to-use-filter-map-andredred-in-python-3-3-0 –

+0

'filter 'jest brzydki i powolny, kiedy musisz użyć' lambda' z nim, niestety twoją alternatywą jest ''' .join (ifilterfalse (częściowe (zawiera, interpunkcja), pytające))' – jamylak

Powiązane problemy