2009-06-18 19 views
10

Mam ciąg, przykład:String Odcinanie Python

s = "this is a string, a" 

gdzie '' (przecinek) zawsze będzie 3rd ostatni znak, aka s [-3].

Zastanawiam się nad sposobami usunięcia "," ale myślę tylko o zamianie łańcucha na listę, usunięciu go i konwersji z powrotem na ciąg znaków. Wydaje się to jednak nieco za proste zadanie.

Jak mogę to zrobić w prostszy sposób?

+4

Zakładam, że string.replace nie wchodzi w grę? Czy zachowujesz w tekście inne przecinki? –

+0

Ja to robię.Pozwól mi zajrzeć do string.replace – sqram

+0

replace byłoby przydatne, jeśli chcesz usunąć wiele wystąpień substr, w tym przypadku będzie wolniej zbyt –

Odpowiedz

28

Normalnie byłoby po prostu zrobić:

s = s[:-3] + s[-2:] 

s[:-3] daje ciąg w górę, ale nie w tym, przecinek chcesz usunięte ("this is a string") i s[-2:] daje inny ciąg rozpoczynający jeden znak poza ten przecinek (" a").

Następnie łączenie dwóch ciągów razem daje ci to, czego szukasz ("this is a string a").

+0

Dziękuję =]. Wciąż jestem otwarty na inne sugestie, jeśli ktoś chce oświecić – sqram

+0

Thanx pax, czy dostaniesz udział po edycji pytania :) –

+0

Nie, jestem po prostu w tym dla dzielenia się miłością. Ale poważnie, nie, SO nie działa w ten sposób. Kiedy znajdę odpowiedź mniej więcej tak samo, jak to, co zamierzałem powiedzieć, przechwalam ją, a czasem rozwijam. Cały przedstawiciel idzie do ciebie. W każdym razie, nie potrzebuję tego, doszedłem do wniosku, że nigdy nie złapię Jona Skeeta, a nawet JaredPar odsuwa się teraz, że muszę spędzać więcej czasu na prawdziwej pracy :-) – paxdiablo

3

Struny w języku Python są niezmienne. Oznacza to, że musisz utworzyć co najmniej 1 nowy ciąg w celu usunięcia przecinka, w przeciwieństwie do edycji ciągu znaków w języku takim jak C.

1

Aby usunąć wszystkie znaki "," w tekście, należy można spróbować

s = s.split(',') 
>> ["this is a string", " a"] 
s = "".join(s) 
>> "this is a string a" 

Lub w jednym wierszu:

s0 = "".join(s.split(',')) 
7

kilka wariantów, za pomocą „usunąć ostatni przecinek” zamiast „usunąć trzeci ostatni znak” są:

s[::-1].replace(",","",1)[::-1] 

lub

''.join(s.rsplit(",", 1)) 

Ale to dość brzydki. Nieco lepiej jest:

a, _, b = s.rpartition(",") 
s = a + b 

To może być najlepszym podejściem, jeśli nie wiem pozycję przecinek (z wyjątkiem ostatniego przecinka w struny) i skutecznie potrzebujemy „zastąpić od prawej”. Jednak Anurag's answer jest bardziej pythonic dla "usunąć trzecią ostatnią postać".

0

Najlepszym prosty sposób to: Można użyć funkcji wymienić: -

>>> s = 'this is a string, a' 
>>> s = s.replace(',','') 
>>> s 
'this is a string a' 

Tutaj replace() funkcja wyszukiwania charakter '' i zastąpienie go przez '' czyli pusty znak

zwrócić uwagę, że zastąpienie() funkcja domyślnie wszystkie „”, ale jeśli chcesz tylko wymienić kilka „” w niektórych przypadkach można użyć: s.replace („”, «», 1)

Powiązane problemy