0

我有一个关于我正在阅读的字符串以及基于分隔符将其拆分并将其存储在列表中的问题。

我有这个输入 1.2.3.4。在哪里。是分隔符。现在,当我使用拆分时,最后会得到这个字符“”。这个角色是什么?

for element in data.split('.'):
    L.append(element)   
    print L  #prints out ["1","2","3","4",""] 

我的问题是最后一个数组元素“”是什么?我想摆脱这个元素不仅在这个数组中,而且在字符串数据中。我尝试使用element.rstrip(element)但它没有摆脱它。我认为我的大部分困惑来自python中的“”指的是什么。我也尝试过使用L.remove(""),但这似乎不起作用。

4

4 回答 4

5

你要求 Python"1.2.3.4."".". 最后一个之后没有任何内容,.因此您的列表中有一个空元素。

防止这种情况的最简单方法是在拆分之前将其剥离。

L = data.strip(".").split(".")

(当您已经有一个列表时,我不确定您为什么要遍历列表并从中构建另一个列表。)

于 2012-09-23T17:39:10.810 回答
4

用于strip()删除最后一个.,data.strip(".")会这样做,或者只是rstrip("."),如果您只想删除.右侧的 。

In [35]: "1.2.3.4.".strip(".")
Out[35]: '1.2.3.4'
In [36]: "1.2.3.4.".strip(".").split(".")
Out[36]: ['1', '2', '3', '4']
于 2012-09-23T17:37:32.247 回答
1

正如其他人已经写的那样,您的最后一个结果中没有字符。""是空字符串。split()将在分隔符的所有出现处拆分,并且由于在最后一个分隔符之后没有任何内容,因此您会在结果中得到(什么都没有)。

我建议您编写代码以期望并丢弃空元素,而不是从您的数字中删除尾随点(这需要您知道有尾随点):

for element in data.split('.'):
    if element:
        L.append(element) 

如果字符串中间有两个分隔符,这也会跳过空元素,如"1.2..3."

顺便说一句,您不需要循环。只需分配拆分的结果,或使用列表推导删除空元素:

L = data.split('.')                           # all parts: equivalent to your code
L = [ elt for elt in data.split('.') if elt ] # non-empty parts only
于 2012-09-23T18:32:39.330 回答
0

你得到是因为尾随点。尝试,在拆分之前:

L = L[:-1]

例如:

>>> a = "1.2.3.4."
>>> b = a.split('.')
>>> b
['1', '2', '3', '4', '']
>>> b = a[:-1]
>>> b.split('.')
['1', '2', '3', '4']
于 2012-09-23T17:37:29.170 回答