Jak usunąć wszystkie spacje w ciągu znaków Pythona? Na przykład chcę, aby struna podobna była strip my spaces
do przekształcenia stripmyspaces
, ale nie mogę tego osiągnąć za pomocą strip()
:
>>> 'strip my spaces'.strip()
'strip my spaces'
python
python-3.x
spaces
strip
zła nazwa użytkownika
źródło
źródło
Odpowiedzi:
Wykorzystując zachowanie str.split bez parametru sep:
Jeśli chcesz tylko usunąć spacje zamiast wszystkich białych znaków:
Przedwczesna optymalizacja
Chociaż wydajność nie jest głównym celem - pisanie przejrzystego kodu jest - oto kilka początkowych terminów:
Zwróć uwagę, że wyrażenie regularne jest buforowane, więc nie jest tak wolne, jak można by sobie wyobrazić. Skompilowanie go wcześniej pomaga niektórym, ale w praktyce będzie miało znaczenie tylko wtedy, gdy wywołasz to wiele razy:
Mimo że re.sub jest 11,3 razy wolniejsze, pamiętaj, że wąskie gardła są z pewnością gdzie indziej. Większość programów nie zauważyłaby różnicy między którąkolwiek z tych 3 opcji.
źródło
\s+
podstawienie. Trzymałbym się ponownie.s.translate
metody przez przypadek? Prawdopodobnie przebija wszystkie metody pokazane na tej stronie.None
- chociaż, co zaskakujące, powoduje to wolniejsze ...myString.translate(None, " \t\r\n\v")
. Zajmuje to tylko 83% w przypadku najszybszej techniki Rogera (rozdziel i dołącz). Nie jestem pewien, czy obejmuje wszystkie białe znaki, które się rozdzielają, ale prawdopodobnie wystarczy dla większości aplikacji ASCII.Obsługuje również wszystkie białe znaki, o których nie myślisz (wierz mi, jest ich mnóstwo).
źródło
Alternatywnie,
A oto wersja Pythona3:
źródło
NameError: name 'string' is not defined
.import string
Najprościej jest użyć zamiany:
Alternatywnie użyj wyrażenia regularnego:
źródło
Usuń spacje początkowe w Pythonie
Usuń końcowe lub końcowe spacje w Pythonie
Usuń białe spacje z początku i końca ciągu w Pythonie
Usuń wszystkie spacje w Pythonie
źródło
Wypróbuj wyrażenie regularne z
re.sub
. Możesz wyszukać wszystkie białe znaki i zastąpić je pustym ciągiem.\s
w twoim wzorcu dopasują białe znaki - a nie tylko spacje (tabulatory, nowe linie itp.). Więcej na ten temat przeczytasz w instrukcji .źródło
źródło
Jak wspomniał Roger Pate, zadziałał dla mnie następujący kod:
Używam Notatnika Jupyter do uruchomienia następującego kodu:
źródło
Stosowane są standardowe techniki filtrowania listy, chociaż nie są one tak wydajne jak metody
split/join
lubtranslate
.Potrzebujemy zestawu białych znaków:
filter
Wbudowane:Zrozumienie listy (tak, użyj nawiasów: patrz punkt odniesienia poniżej):
Krotnie:
Reper:
źródło
TL / DR
To rozwiązanie zostało przetestowane przy użyciu Pythona 3.6
Aby usunąć wszystkie spacje z ciągu w Pythonie3, możesz użyć następującej funkcji:
Aby usunąć wszelkie białe znaki ('\ t \ n \ r \ x0b \ x0c'), możesz użyć następującej funkcji:
Wyjaśnienie
str.translate
Metoda Pythona jest wbudowaną metodą klasową str, pobiera tabelę i zwraca kopię ciągu z każdym znakiem odwzorowanym w przekazanej tabeli translacji. Pełna dokumentacja dla str.translateDo stworzenia tabeli tłumaczeń
str.maketrans
służy. Ta metoda jest kolejną wbudowaną metodą klasystr
. Tutaj używamy go tylko z jednym parametrem, w tym przypadku ze słownikiem, w którym klucze to znaki, które mają być zastąpione, odwzorowane na wartości z wartością zastępującą znaki. Zwraca tabelę tłumaczeń do użycia zstr.translate
. Pełna dokumentacja dla str.maketransstring
Moduł w Pythonie zawiera kilka wspólnych operacji łańcuchowych i stałe.string.whitespace
jest stałą, która zwraca łańcuch zawierający wszystkie znaki ASCII, które są uważane za białe znaki. Obejmuje to spację znaków, tabulator, wysuw wiersza, powrót, wysuw formularza i tabulator pionowy. Pełna dokumentacja dla stringówW drugiej funkcji
dict.fromkeys
służy do tworzenia słownika, w którym kluczami są znaki w ciągu zwracane przezstring.whitespace
każdy z wartościąNone
. Pełna dokumentacja dla dict.fromkeysźródło
Jeśli optymalna wydajność nie jest wymagana, a po prostu chcesz czegoś martwego prostego, możesz zdefiniować podstawową funkcję do testowania każdego znaku za pomocą wbudowanej metody "isspace" klasy string:
Budowanie
no_white_space
struny w ten sposób nie zapewni idealnej wydajności, ale rozwiązanie jest łatwe do zrozumienia.Jeśli nie chcesz definiować funkcji, możesz przekonwertować ją na coś nieco podobnego za pomocą rozumienia list. Pożyczanie z rozwiązania u góry odpowiedzi
join
:źródło