2015-12-31 9 views
6

Mi sono imbattuto in quello che penso sia un bug, e sto cercando una conferma o che non capisco come funziona questo metodo.Comprendere il metodo lstrip di Python sulle stringhe

Ecco la mia uscita di base:

(Pdb) x = 'KEY_K' 
(Pdb) x.lstrip('K') 
'EY_K' 
(Pdb) x.lstrip('KE') 
'Y_K' 
(Pdb) x.lstrip('KEY') 
'_K' 
(Pdb) x.lstrip('KEY_') 
'' 
(Pdb) import sys 
(Pdb) sys.version 
'2.7.11 (default, Dec 5 2015, 14:44:47) \n[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.1.76)]' 

mia comprensione è che la finale 'lstrip' in questo esempio dovrebbe essere tornato 'K', ma non lo ha fatto. Qualcuno sa perché?

risposta

4

E 'proprio nella documentazione:

lstrip (...) S.lstrip ([caratteri]) -> string o Unicode

restituire una copia della stringa S con uno spazio vuoto rimosso. Se i caratteri sono dati e non Nessuno, rimuove i caratteri in caratteri invece. Se caratteri è Unicode, S verrà convertito in Unicode prima stripping

'K' è in 'KEY_', è per questo che il tuo ultimo esempio restituisce ''.

Nota che 'K' non sarebbe stato rimosso se preceduta da un carattere che non è in 'KEY_':

>>> 'KEY_xK'.lstrip('KEY_') 
'xK' 
5

La funzione lstrip() non si comporta esattamente nel modo in cui si pensa che potrebbe. x.lstrip(argument) rimuove qualsiasi carattere in argument dal lato sinistro della stringa x finché non raggiunge un carattere non in argument.

Quindi 'KEY_K'.lstrip('KEY_') genera '' perché l'ultimo carattere, K, è in KEY_.

+0

Mi sento come se questa fosse un'ottima risposta, ma posso sceglierne solo una. –

+0

Ha, ad essere sincero penso che tu abbia fatto la scelta giusta! – gtlambert

1

Il secondo argomento di lstrip è impostato su di caratteri che verranno rimossi. Se è necessario rimuovere una sottostringa, è possibile utilizzare:

if x.startswith('KEY_'): 
    x = x.replace('KEY_', '', 1) 
Problemi correlati