2012-09-23 110 views
0

我有一個關於我正在閱讀的字符串的問題,並根據分隔符將其拆分並將其存儲在列表中。在Python中拆分

我有這個輸入1.2.3.4。哪裏。是分隔符。 現在,當我使用分割我得到這個字符「」在最後。這個角色是什麼?

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

我的問題是什麼是最後一個數組元素「」?我想擺脫這個元素不僅在這個數組中,而且在字符串數據。 我嘗試使用element.rstrip(element),但它沒有擺脫它。我認爲我的大部分困惑都來自「」在python中的含義。 Ialso嘗試使用L.remove("")但似乎沒有工作。

+0

爲什麼此問題具有numpy標記? –

回答

0

你得到,因爲尾隨dot.Try的,分裂前:

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'] 
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'] 
5

你問的Python對"."分裂"1.2.3.4."。最後的.之後什麼也沒有,所以你在列表中得到一個空的元素。

最簡單的方法來防止它是在拆分之前剝離它。

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

(我不知道爲什麼你遍歷列表,並從中建立另一個列表中,當你已經有一個列表。)

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