为什么split在python中拆分时会产生额外的空字符串?

时间:2015-02-16 05:27:28

标签: python-2.7 split

用例子证明我的怀疑

example = "$2000"  
example.split("$")  
['', '2000']

但如果我这样做

example2 = "2000$3000"
example2.split("$")
['2000', '3000'] 

为什么在这个例子中没有多余的空字符串?
如何分裂在幕后工作?

2 个答案:

答案 0 :(得分:2)

因为您在分隔符上拆分。如果您将字符串$2000$分隔符拆分,则左侧有一个空字符串2000在右边:

            $2000
nothing____/ \____2000

对于2000$3000的第二种情况,仍然只有一个分隔符,因此它仍然在数组中生成两个值。只是分隔符剩下的值是2000而不是空字符串:

     2000$3000
2000____/ \____3000

如果您没有通过指定允许的最大拆分数来限制split,则生成的数组大小应始终比分隔符的数量多一个。

如果要从结果集合中删除所有空字符串,可以使用列表推导来完成,第三部分如下:

>>> s = '$$$1000$$2000$3000$$$'           # test data

>>> [x for x in s.split('$') if x != '']  # remove all empty strings
['1000', '2000', '3000']

还有其他一些方法可以摆脱最终的空白,无论是一个还是全部:

>>> import re
>>> s='$$$1000$$2000$3000$$$'

>>> re.sub('^\$|\$$','',s).split('$')         # just one
['', '', '1000', '', '2000', '3000', '', '']

>>> re.sub('^\$*|\$*$','',s).split('$')       # all at the ends
['1000', '', '2000', '3000']

答案 1 :(得分:1)

来自文档:https://docs.python.org/2/library/string.html

It (the argument to the function) specifies a string to be used as the word separator. The returned list will then have one more item than the number of non-overlapping occurrences of the separator in the string.

示例中分隔符的出现次数为1。 因此split将返回2个元素。第一个元素必须是空字符串,因为在分隔符之前没有任何内容。

您的第二个示例在返回的结果中没有空字符串,因为2000位于分隔符$之前。

您可以将split函数视为在字符串发生的任何地方将字符串切换为数组元素。