Najpierw usuń ;
od prawej krawędzi wyrażenie:
s.rstrip(';').split(';')
Można również wykorzystać filter()
(który będzie odsączyć także pustych elementów, które nie zostały znalezione na końcu ciągu) . Ale powyższe jest, moim zdaniem, najczystszym podejściem, gdy chcesz uniknąć pustego elementu na końcu, wynikającego z ";
" znaków występujących na końcu łańcucha.
EDIT: Właściwie bardziej dokładne niż wymienione powyżej (jeżeli powyższe jest jeszcze bardziej dokładne niż przy użyciu filter()
) jest następujące podejście:
(s[:-1] if s.endswith(';') else s).split(';')
To usunie tylko ostatni element, i tylko wtedy, gdy zostanie utworzone jako puste.
Testowanie wszystkie trzy rozwiązania będzie można zobaczyć, że dają różne wyniki:
>>> 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', '', '']
';;;' => ['', '', '']
Proszę nie używać 'str' jako nazwy zmiennej. Ukrywa wbudowany 'str'. –
@ Mark Byers dziękuję za komentarz, moje rzeczywiste var nazwa jest inna. – Jisson