我對如何使用拆分功能有疑問。拆分功能 - 避免最後一個空白空間
str = 'James;Joseph;Arun;'
str.split(';')
我得到的結果['James', 'Joseph', 'Arun', '']
我需要的輸出['James', 'Joseph', 'Arun']
什麼是做到這一點的最好方法是什麼?
我對如何使用拆分功能有疑問。拆分功能 - 避免最後一個空白空間
str = 'James;Joseph;Arun;'
str.split(';')
我得到的結果['James', 'Joseph', 'Arun', '']
我需要的輸出['James', 'Joseph', 'Arun']
什麼是做到這一點的最好方法是什麼?
要刪除所有空字符串,你可以使用列表理解:
>>> [x for x in my_str.split(';') if x]
或過濾器/布爾招:
>>> filter(bool, my_str.split(';'))
注意,這也將在啓動或刪除空字符串名單的中間,不僅在最後。
如果你只是想刪除末尾的空字符串,你可以拆分之前使用rstrip
。
>>> my_str.rstrip(';').split(';')
+1直到現在還沒有聽說過'filer(bool,x)',只有'filter(None,x)'。你認爲哪個更好? – jamylak
@jamylak:兩者都很好。我更喜歡'filter(bool,x)',因爲它使得它更明顯,它爲什麼有效。使用'None'作爲過濾函數看起來很神奇(除非你已經閱讀了文檔以找出它的工作原理)。但其他人更喜歡'filter(None,x)',所以我認爲這沒什麼區別。 –
首先從字符串的右邊緣除去;
:
s.rstrip(';').split(';')
也可以使用filter()
(其將過濾掉也了未在字符串的結尾處找到空元素) 。但是,在我看來,上面實際上是最乾淨的方法,因爲當字符串末尾出現「;
」字符時,您最終要避免出現空元素。
編輯:其實比上述更準確(以上地方仍比使用filter()
更準確)是以下方法:
(s[:-1] if s.endswith(';') else s).split(';')
這將只刪除最後一個元素,且僅當它將被創建爲空。
測試的所有三種解決方案,你會看到,他們給不同的結果:
>>> 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', '', '']
';;;' => ['', '', '']
請不要用'str'作爲變量名。它隱藏了內置的'str'。 –
@馬克·拜爾斯感謝您的評論,我的實際var名稱是不同的。 – Jisson