17 Stimmen

Interpunktion aus Python-Listenelementen entfernen

Ich habe eine Liste wie

['hello', '...', 'h3.a', 'ds4,']

sollte sich dies in

['hello', 'h3a', 'ds4']

und ich möchte nur die Interpunktion entfernen, wobei die Buchstaben und Zahlen erhalten bleiben sollen. Interpunktion ist alles, was in der string.punctuation konstant. Ich weiß, dass dies ist gunna einfach sein, aber im Art Noobie in Python so...

Danke, giodamelio

28voto

Mark Byers Punkte 761508

Angenommen, Ihre ursprüngliche Liste ist in einer Variablen x gespeichert, können Sie dies verwenden:

>>> x = [''.join(c for c in s if c not in string.punctuation) for s in x]
>>> print(x)
['hello', '', 'h3a', 'ds4']

Um die leeren Zeichenfolgen zu entfernen:

>>> x = [s for s in x if s]
>>> print(x)
['hello', 'h3a', 'ds4']

9voto

Verwenden Sie string.translate:

>>> import string
>>> test_case = ['hello', '...', 'h3.a', 'ds4,']
>>> [s.translate(None, string.punctuation) for s in test_case]
['hello', '', 'h3a', 'ds4']

Für die Dokumentation von translate, siehe http://docs.python.org/library/string.html

3voto

florex Punkte 828

In Python 3+ verwenden Sie stattdessen dies:

import string
s = s.translate(str.maketrans('','',string.punctuation))

2voto

Ant Punkte 4908
import string

print ''.join((x for x in st if x not in string.punctuation))

ps st ist die Zeichenfolge. für die Liste ist die gleiche...

[''.join(x for x in par if x not in string.punctuation) for par in alist]

ich denke, das funktioniert gut. schauen Sie sich string.punctuaction an:

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

1voto

Rafe Kettler Punkte 73546

Um eine neue Liste zu erstellen:

[re.sub(r'[^A-Za-z0-9]+', '', x) for x in list_of_strings]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X