Split function - avoid last empty space
我对如何使用拆分函数有疑问。
1 2 | str = 'James;Joseph;Arun;' str.split(';') |
我得到了结果。
我需要输出为
最好的方法是什么?
要删除所有空字符串,可以使用列表理解:
1 | >>> [x for x in my_str.split(';') if x] |
或者过滤/布尔技巧:
1 | >>> filter(bool, my_str.split(';')) |
请注意,这还将删除列表开头或中间的空字符串,而不仅仅是结尾的空字符串。
- 从字符串列表中删除空字符串
如果只想删除末尾的空字符串,可以在拆分之前使用
1 | >>> my_str.rstrip(';').split(';') |
首先从字符串右边缘移除
1 | s.rstrip(';').split(';') |
您还可以使用
编辑:实际上比上面更准确(上面仍然比使用
1 | (s[:-1] if s.endswith(';') else s).split(';') |
这将仅删除最后一个元素,并且仅当它将被创建为空时才删除。
测试您将看到的三种解决方案,它们给出不同的结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | >>> 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', '', ''] ';;;' => ['', '', ''] |