Chcę usunąć znaki w ciągu znaków w pythonie:
string.replace(',', '').replace("!", '').replace(":", '').replace(";", '')...
Ale mam wiele postaci, które muszę usunąć. Myślałem o liście
list = [',', '!', '.', ';'...]
Ale jak mogę użyć list
do zastąpienia znaków w string
?
Odpowiedzi:
Jeśli używasz Python2, a twoje dane wejściowe są ciągami (nie kodami Unicode), absolutnie najlepszą metodą jest
str.translate
:W przeciwnym razie należy rozważyć następujące opcje:
A. Iteruj znak po znaku char, pomiń niechciane znaki i
join
wynikową listę:(Uwaga: wersja generatora
''.join(c for c ...)
będzie mniej wydajna).B. Utwórz w locie wyrażenie regularne
re.sub
z pustym ciągiem znaków:(
re.escape
zapewnia, że znaki takie jak^
lub]
nie złamie wyrażenie regularne).C. Użyj wariantu mapowania
translate
:Pełny kod testowy i czasy:
Wyniki:
(Na marginesie, liczba ta
remove_chars_translate_bytes
może dać nam wskazówkę, dlaczego przemysł tak niechętnie stosuje Unicode przez tak długi czas).źródło
TypeError: translate() takes exactly one argument (2 given)
. Najwyraźniej argument stanowi argument.Możesz użyć
str.translate()
:Przykład:
źródło
s.translate(dict.fromkeys(map(ord, u",!.;")))
unicode.translate()
Metoda ma inne parametry niżstr.translate()
metoda. Użyj wariantu w powyższym komentarzu dla obiektów Unicode.Możesz użyć metody tłumaczenia .
źródło
źródło
Jeśli używasz Python3 i szukasz
translate
rozwiązania - funkcja została zmieniona i teraz przyjmuje 1 parametr zamiast 2.Ten parametr jest tabelą (może być słownikiem), w której każdy klucz jest liczbą porządkową Unicode (int) znaku do znalezienia, a wartością jest zamiennik (może być liczbą porządkową Unicode lub ciągiem znaków, na który ma zostać odwzorowany klucz).
Oto przykład użycia:
źródło
Inne podejście z użyciem wyrażenia regularnego:
źródło
Dlaczego nie prosta pętla?
Unikaj także listy nazwisk. Zastępuje wbudowaną funkcję
list
.źródło
możesz użyć czegoś takiego
Ten kod nie jest moim własnym i pochodzi stąd świetny artykuł i szczegółowo to robię
źródło
Również interesujący temat dotyczący usuwania akcentu UTF-8 z łańcucha przekształcającego znak w ich standardowy nieakcentowany znak:
Jaki jest najlepszy sposób na usunięcie akcentów w ciągu znaków Unicode w Pythonie?
fragment kodu z tematu:
źródło
Być może bardziej nowoczesny i funkcjonalny sposób na osiągnięcie tego, co chcesz:
należy pamiętać, że w tym konkretnym celu jest to dość przesada, ale gdy potrzebujesz bardziej złożonych warunków, przydatny jest filtr
źródło
prosta droga,
wynik:
this-is-string--foo----bar--tuna---sandwich--is---good
źródło
Co powiesz na to - jedna wkładka.
źródło
myślę, że jest to dość proste i wystarczy!
to jeden ze sposobów, aby to zrobić. Ale jeśli masz dość utrzymywania listy znaków, które chcesz usunąć, możesz to zrobić, korzystając z numeru porządkowego ciągów, które iterujesz. numer zamówienia jest wartością ascii tego znaku. liczba ascii dla 0 jako char wynosi 48, a liczba ascii dla małych liter z wynosi 122, więc:
źródło
Obecnie nurkuję w schemacie, a teraz myślę, że jestem dobry w rekursywności i ewaluacji. HAHAHA. Po prostu udostępnij kilka nowych sposobów:
po pierwsze, sprawdź to
po drugie, powtórz to
Hej, nie głosuj za głosem. Chcę tylko podzielić się nowym pomysłem.
źródło
Myślę o rozwiązaniu tego problemu. Najpierw wprowadzę ciąg znaków jako listę. Następnie zastąpiłbym pozycje z listy. Następnie za pomocą polecenia Join zwrócę listę jako ciąg znaków. Kod może wyglądać tak:
Spowoduje to usunięcie czegokolwiek z ciągu. Co myślicie o tym?
źródło
Oto
more_itertools
podejście:Tutaj dzielimy się na przedmioty znalezione w
blacklist
, spłaszczamy wyniki i łączymy ciąg.źródło
Python 3, implementacja rozumienia listy pojedynczej linii.
źródło
Usuń *% i @! z poniżej ciągu:
źródło