Prima rimuovere ;
dal bordo destro della stringa:
s.rstrip(';').split(';')
È possibile anche utilizzare filter()
(che filtrerà fuori anche elementi vuoti non trovati alla fine della stringa) . Ma quanto sopra è l'approccio più pulito a mio avviso, quando si desidera evitare elementi vuoti alla fine, risultanti dai caratteri ";
" che si verificano alla fine della stringa.
EDIT: In realtà più accurata rispetto alla suddetta (dove quanto sopra è ancora più preciso rispetto all'utilizzo filter()
) è il seguente approccio:
(s[:-1] if s.endswith(';') else s).split(';')
Questo rimuove solo l'ultimo elemento, e solo se sarebbe creato vuoto.
prova tutte e tre le soluzioni si vedrà, che danno risultati diversi:
>>> def test_solution(solution):
cases = [
'James;Joseph;Arun;',
'James;;Arun',
'James;Joseph;Arun',
';James;Joseph;Arun',
'James;Joseph;;;',
';;;',
]
for case in cases:
print '%r => %r' % (case, solution(case))
>>> test_solution(lambda s: s.split(';')) # original solution
'James;Joseph;Arun;' => ['James', 'Joseph', 'Arun', '']
'James;;Arun' => ['James', '', 'Arun']
'James;Joseph;Arun' => ['James', 'Joseph', 'Arun']
';James;Joseph;Arun' => ['', 'James', 'Joseph', 'Arun']
'James;Joseph;;;' => ['James', 'Joseph', '', '', '']
';;;' => ['', '', '', '']
>>> test_solution(lambda s: filter(bool, s.split(';')))
'James;Joseph;Arun;' => ['James', 'Joseph', 'Arun']
'James;;Arun' => ['James', 'Arun']
'James;Joseph;Arun' => ['James', 'Joseph', 'Arun']
';James;Joseph;Arun' => ['James', 'Joseph', 'Arun']
'James;Joseph;;;' => ['James', 'Joseph']
';;;' => []
>>> test_solution(lambda s: s.rstrip(';').split(';'))
'James;Joseph;Arun;' => ['James', 'Joseph', 'Arun']
'James;;Arun' => ['James', '', 'Arun']
'James;Joseph;Arun' => ['James', 'Joseph', 'Arun']
';James;Joseph;Arun' => ['', 'James', 'Joseph', 'Arun']
'James;Joseph;;;' => ['James', 'Joseph']
';;;' => ['']
>>> test_solution(lambda s: (s[:-1] if s.endswith(';') else s).split(';'))
'James;Joseph;Arun;' => ['James', 'Joseph', 'Arun']
'James;;Arun' => ['James', '', 'Arun']
'James;Joseph;Arun' => ['James', 'Joseph', 'Arun']
';James;Joseph;Arun' => ['', 'James', 'Joseph', 'Arun']
'James;Joseph;;;' => ['James', 'Joseph', '', '']
';;;' => ['', '', '']
prega di non utilizzare 'str' come un nome di variabile. Nasconde il 'str' incorporato. –
@ Mark Byers ti ringrazio per il tuo commento, il mio vero nome var è diverso. – Jisson